![](/img/trans.png)
[英]Set WPF DataGrid ComboBoxColumn ItemSource with Binding - MVVM
[英]WPF MVVM DataGrid ComboboxColumn binding to List in my Model
我目前正在使用MVVM进行WPF项目。
我有一个绑定到这样的模型的ObservableCollection
的DataGrid
:
class Model : INotifyPropertyChanged
{
private string m_Name;
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
OnPropertyChanged("Name");
}
}
private List<string> m_Names;
public List<string> Names
{
get
{
return m_Names;
}
set
{
m_Names = value;
OnPropertyChanged("Names");
}
}
private double? m_Value;
public double? Value
{
get
{
return m_Value;
}
set
{
m_Value = value;
OnPropertyChanged("Value");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
现在,我想使用DataGridComboBoxColumn
来创建一个组合框,其属性“名称”为SelectedItem,名称为ItemSource。
我的每个模型都有自己的一组名称,这些名称与其他任何模型的名称都不相同。
我已经迷糊了,并通过StackOverflow查看,但是我没有找到任何解决方案。 我也曾尝试过过滤器,就像我知道DevExpress Grid Controls可以做到的那样,但是我没有找到基本的WPF DataGrid的任何东西。
如何将DataGridComboBoxColumn
绑定到模型中的属性List
?
如果使用DataGridComboBoxColumn,则必须使用静态资源来填充ItemsSource,这在“备注”部分中进行了说明:https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.controls.datagridcomboboxcolumn?view = netframework-4.8
因为每个视图模型都有不同的“名称”,所以可以使用DataGridTemplateColumn代替DataGridComboBoxColumn
<DataGridTemplateColumn Header="Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Names}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
你尝试了什么? 假设DataGrid
的ItemsSource
属性已设置或绑定到IEnumerable<Model>
,则此方法应该起作用:
<DataGridComboBoxColumn ItemsSource="{Binding Names}" SelectedItemBinding="{Binding Name}" />
请参考这篇 TechNet文章以获取更多建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.