В настоящее время я работаю над проектом WPF с MVVM.
У меня есть 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, чтобы иметь Combobox с моим свойством «Имя» в качестве SelectedItem и Names в качестве ItemSource.
Каждая из моих моделей имеет собственный набор имен, которые не совпадают с именами других моделей.
Я гуглил и просматривал StackOverflow, но не нашел решения. Я также пытался применять фильтры, как я знаю, DevExpress Grid Controls, но я ничего не нашел для базовых WPF DataGrids.
Как я могу привязать свой DataGridComboBoxColumn к свойству List в моей модели?





Если вы используете 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>
Что вы пробовали? При условии, что свойство DataGridItemsSource установлено или привязано к IEnumerable<Model>, это должно работать:
<DataGridComboBoxColumn ItemsSource = "{Binding Names}" SelectedItemBinding = "{Binding Name}" />
Дополнительные предложения см. в статье это TechNet.
Спасибо. Это то, что я искал.