MVVM使用组合框/不同的itemsource数据绑定Datagrid

MVVM使用组合框/不同的itemsource数据绑定Datagrid,mvvm,combobox,datagrid,Mvvm,Combobox,Datagrid,我有一个用于用户输入的datagrid,每个单元格都是一个用于数据选择的组合框。所选值应绑定到datagrid的itemsource,以便稍后将数据保存到我的数据库中。组合框值应来自不同的itemsource 用户界面: 模型和视图模型: // Models public class User { public string Firstname { get; set; } public string Lastname {get; set; } } public cla

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

用户界面:


模型和视图模型:

// 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


}
//模型
公共类用户
{
公共字符串名{get;set;}
公共字符串Lastname{get;set;}
}
公共类名
{
公共字符串名称{get;set;}
}
公共类姓氏
{
公共字符串名称{get;set;}
}
//视图模型
公共类GenerateViewModel:NotifyUIBase
{
#区域属性
公共ObservableCollection用户{get;set;}
公共ObservableCollection名字{get;set;}
公共ObservableCollection Lastnames{get;set;}
#端区
#区域构造函数
公共GenerateViewModel()
{
Firstnames=新的observeCollection()
{
new Firstname(){Name=“Firstname1”},
新建Firstname(){Name=“Firstname2”}
};
Lastnames=新的ObservableCollection()
{
新建Lastname(){Name=“Lastname1”},
新建Lastname(){Name=“Lastname2”}
};
Users=newobserveCollection{new User()};
}
#端区
#区域方法
#端区
}

datagrid内部的combobox保持为空,但我与datagrid外部的其他combobox的绑定效果良好

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

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


非常感谢您的帮助,但我的解决方案似乎是错误的。我必须为此创建一个新的帖子,以确认我走在正确的道路上。也许这里也是问这个问题的正确地方。如何将selectedvalue绑定到集合用户。返回Firstname?我是否必须创建第二个集合来存储选定的值?
 <HierarchicalDataTemplate>
         <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, 
                                         AncestorType={x:Type Window}}, 
                                         Path=DataContext.Firstnames}" 
                   DisplayMemberPath="Name"/>
 </HierarchicalDataTemplate>