【问题标题】:MVVM Databinding Datagrid with Combobox / different itemsourceMVVM Data Binding Datagrid with Combobox / 不同的itemssource
【发布时间】:2017-05-23 23:10:26
【问题描述】:

我有一个用于用户输入的数据网格,每个单元格都是一个用于数据选择的组合框。选定的值应绑定到数据网格的 itemsource 以便稍后将数据保存到我的数据库中。组合框值应来自不同的 itemsource。

用户界面:

                    <DataGrid ItemsSource="{Binding Users}">
                        <DataGrid.Columns>
                             <DataGridTemplateColumn Header="Firstname">
                                <DataGridTemplateColumn.CellTemplate>
                                    <HierarchicalDataTemplate>
                                        <ComboBox ItemsSource="{Binding Firstnames}" DisplayMemberPath="Name"/>
                                    </HierarchicalDataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                    <ComboBox ItemsSource="{Binding Firstnames}" DisplayMemberPath="Name">

                    </ComboBox>
                </StackPanel>

模型和视图模型:

// Models

public class User 
{
    public string Firstname { get; set; }
    public string Lastname {get; set; }
}

public class Firstname
{
    public string Name { get; set; }
}

public class Lastname 
{
    public string Name { get; set; }
}


//ViewModel

public class GenerateViewModel : NotifyUIBase
{

    #region properties
    public ObservableCollection<User> Users { get; set; }

    public ObservableCollection<Firstname> Firstnames { get; set; }
    public ObservableCollection<Lastname> Lastnames { get; set; }

    #endregion


    #region Constructor

    public GenerateViewModel()

    {
        Firstnames = new ObservableCollection<Firstname>()
        {
            new Firstname() {Name="Firstname1"},
            new Firstname() {Name= "Firstname2"}
        };
        Lastnames = new ObservableCollection<Lastname>()
        {
            new Lastname() {Name="Lastname1"},
            new Lastname() {Name= "Lastname2"}
        };
        Users = new ObservableCollection<User> {new User()};

    }

    #endregion

    #region Methods


    #endregion


}

数据网格内部的组合框保持为空,但我与数据网格外部的附加组合框的绑定效果很好。

【问题讨论】:

    标签: mvvm combobox datagrid


    【解决方案1】:

    DataContext 无法识别,必须从主窗口获取:

     <HierarchicalDataTemplate>
             <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, 
                                             AncestorType={x:Type Window}}, 
                                             Path=DataContext.Firstnames}" 
                       DisplayMemberPath="Name"/>
     </HierarchicalDataTemplate>
    

    【讨论】:

    • 非常感谢是可行的,但似乎我对解决方案的想法是错误的。我必须为此创建一个新帖子,以确认我走对了。
    • 也许这里也是问这个问题的正确地方。如何将 selectedvalue 绑定到集合 users.Firstname 回来?我是否必须创建第二个集合来存储所选值?
    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 2013-06-30
    • 2018-07-16
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2011-08-23
    相关资源
    最近更新 更多