C# 如何在wpf datagrid中绑定组合框?

C# 如何在wpf datagrid中绑定组合框?,c#,.net,wpf,data-binding,combobox,C#,.net,Wpf,Data Binding,Combobox,如何在wpf数据网格中绑定组合框的(Itemssource和选定项)?我使用的是MVVM模式。 我试过了 <DataGridTemplateColumn Header="Example 9"> <DataGridTemplateColumn.CellTemplate> <DataTemplate>

如何在wpf数据网格中绑定组合框的(Itemssource和选定项)?我使用的是MVVM模式。 我试过了

<DataGridTemplateColumn Header="Example 9">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding PartIds, RelativeSource={RelativeSource AncestorType=Window}}" SelectedItem="{Binding PartId, UpdateSourceTrigger=PropertyChanged}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>


用于数据绑定的属性

#region DataGrid List<String> Example

        public ObservableCollection<MyCar> MyCars { get; set; }
        public List<string> PartIds { get; set; } 

        #endregion

        #region DataGrid List<Class> Example

        public List<CarPart> CarParts { get; set; }

        #endregion
#地区数据网格列表示例
公共可观察收集MyCars{get;set;}
公共列表分区{get;set;}
#端区
#区域数据网格列表示例
公共列表CarParts{get;set;}
#端区
参考:

尝试让您的列表成为可观察的集合。当新对象添加到集合中时,您需要确保您的属性告诉您的UI,
ObservableCollection
就是这样为您做的

还要确保您的
CarPart
MyCar
类实现
INotifyPropertyChanged


这是否是您的问题取决于您的属性设置的确切时间。

只是一个猜测,因为我不在我的开发工作站,但请尝试使用ElementName按名称而不是相对源引用窗口

比如:

ItemsSource="{Binding CarParts,ElementName=MyWindowName}"

在窗口定义中添加一个Name=“MyWindowName”。

我尝试了很多选项,但我发现最简单的选项是生成组合框的加载事件并将其与列表或数据表绑定

e、 g。 在Xaml中


只需使用这个os.cs端


DataContext=CarParts

如何设置窗口控件的DataContext?公共部分类MainWindow:Window{MainWindowViewModel vm=new MainWindowViewModel();公共MainWindow(){this.DataContext=vm;InitializeComponent();}}这会有帮助
ItemsSource="{Binding CarParts,ElementName=MyWindowName}"
 <DataGridTemplateColumn.CellEditingTemplate>
       <DataTemplate>
                  <ComboBox x:Name="cmbPayee" Loaded="cmbPayee_Loaded" Text="{Binding PayeeName, NotifyOnSourceUpdated=True,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValue ="{Binding PayeeID, NotifyOnSourceUpdated=True,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  DisplayMemberPath = "Payee1" SelectedValuePath="PayeeID"/>
      </DataTemplate>
private void cmbPayee_Loaded(object sender, RoutedEventArgs e)
    {
        ComboBox cmb = (ComboBox)sender;
            var res = from k in db.Payees
                      select k;
            cmb.ItemsSource = res.ToList();
            cmb.DisplayMemberPath = "Payee1";
            cmb.SelectedValuePath = "PayeeID";

    }