У меня есть коллекция:
public static readonly DependencyProperty UserAutoCalculationTemplatesProperty = DependencyProperty.Register("UserAutoCalculationTemplates", typeof(ObservableCollection<AutoCalculationTemplate>), typeof(Options));
public ObservableCollection<AutoCalculationTemplate> UserAutoCalculationTemplates
{
get => (ObservableCollection<AutoCalculationTemplate>)GetValue(UserAutoCalculationTemplatesProperty);
set => SetValue(UserAutoCalculationTemplatesProperty, value);
}
Класс AutoCalculationTemplate:
public class AutoCalculationTemplate : INotifyPropertyChanged
{
private CalculationVariants _templateType;
public CalculationVariants TemplateType
{
get
{
return _templateType;
}
set
{
_templateType = value;
OnPropertyChanged(new PropertyChangedEventArgs("TemplateType"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChanged?.Invoke(this, e);
}
}
Мой XAML.
<DataGrid ItemsSource="{Binding UserAutoCalculationTemplates, ElementName=OptionsWindow,Mode=TwoWay,NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" Name="AutoCalculaionTemplates">
<DataGrid.Columns>
<DataGridTemplateColumn Header="">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
x:Name="AutoCalculationTypeCombo"
ItemsSource="{Binding Source={enum:Enumeration {x:Type options:CalculationVariants}}}"
DisplayMemberPath="Description"
SelectedValue="{Binding UserAutoCalculationTemplates.TemplateType, ElementName=OptionsWindow,Mode=TwoWay,NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Value"
DropDownClosed="AutoCalculationTypeCombo_OnDropDownClosed"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGrid.Columns>
</DataGrid>
Combobox, связанный с перечислением через расширение из этой топи c: Связывание свойства перечисления с ComboBox в WPF :
перечисление:
public enum CalculationVariants
{
[Description("Внутренний")]
CalculateWithCSharp,
[Description("Внешний скрипт")]
CalculateWithPython,
[Description("Общий")]
Common
}
Я хочу, чтобы Combobox делал две вещи:
- отображает все возможные значения enum (их описания) при нажатии;
- отображает текущее значение свойства TemplateType ie элементов в коллекции UserAutoCalculationTemplatesProperty (в режиме ожидания).
Пока что это только первое, но не второе, как мне это исправить?