C# 如何在wpf datagrid中绑定组合框?
如何在wpf数据网格中绑定组合框的(Itemssource和选定项)?我使用的是MVVM模式。 我试过了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>
<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";
}