我目前正在使用MVVM进行WPF项目。
我有一个DataGrid
绑定到ObservableCollection
的模型上,如下所示:
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
?
答案 0 :(得分:1)
如果使用DataGridComboBoxColumn,则必须为ItemsSource提供静态资源,这在“备注”部分中进行了说明。 https://docs.microsoft.com/en-us/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>
答案 1 :(得分:0)
您尝试了什么?假设DataGrid
的{{1}}属性已设置或绑定到ItemsSource
,则该方法应该起作用:
IEnumerable<Model>
请参阅this TechNet文章以获取更多建议。