繁体   English   中英

将 combobox 绑定到具有此枚举的 class 的枚举和集合

[英]Bind combobox to enum and collection of class that has this enum

我有一个集合:

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);
}

自动计算模板 Class:

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 通过本主题的扩展绑定到枚举: Databinding an enum property to a ComboBox in WPF

枚举:

public enum CalculationVariants
{
    [Description("Внутренний")]
    CalculateWithCSharp,
    [Description("Внешний скрипт")]
    CalculateWithPython,
    [Description("Общий")]
    Common
}

我想让 Combobox 做两件事:

  1. 单击时显示枚举的所有可能值(它们的描述);
  2. 显示 UserAutoCalculationTemplatesProperty 集合中项目的 TemplateType 属性的当前值(空闲)。

现在它只做第一件事,而不做第二件事,我该如何解决?

以下示例将ComboBox.SelectedValue绑定到OptionsWindow的属性:

public static readonly DependencyProperty SelectedCalculationVariantsProperty = DependencyProperty.Register(
  "SelectedCalculationVariants", 
  typeof(CalculationVariants), 
  typeof(Options));

public CalculationVariants SelectedCalculationVariants
{
    get => (CalculationVariants) GetValue(SelectedCalculationVariantsProperty);
    set => SetValue(SelectedCalculationVariantsProperty, value);
}

<DataGrid.Columns>
  <DataGridTemplateColumn Header="">
    <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
        <ComboBox x:Name="AutoCalculationTypeCombo"
                  ItemsSource="{Binding Source={enum:Enumeration {x:Type options:CalculationVariants}}}"
                  DisplayMemberPath="Description"
                  SelectedValue="{Binding SelectedCalculationVariants, ElementName=OptionsWindow, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                  SelectedValuePath="Value"
                  DropDownClosed="AutoCalculationTypeCombo_OnDropDownClosed"/>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGrid.Columns>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM