【问题标题】:Bind enum to combobox and bind to property将枚举绑定到组合框并绑定到属性
【发布时间】:2015-01-30 14:14:55
【问题描述】:

我已使用以下方法成功地将以下枚举传递给组合框:

public enum Color
{
    Blue,
    Green,
    Yellow
}

public Color _color { get; set; }
public Type Colors
{
    get { return typeof(Color); }
}

在视图中我有以下内容:

<ComboBox ItemsSource="{Binding Colors, Converter={StaticResource enumConverter}}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TextBlock Text="{Binding }" FontSize="14"/>
            </Grid>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

这让我可以在盒子里画出一种颜色。我想要做的是将所选颜色绑定到属于我的视图模型的属性。我对转换器很陌生,所以我可能会遗漏一些东西。

【问题讨论】:

    标签: wpf xaml binding enums


    【解决方案1】:

    您可以将ComboBoxSelectedItem 绑定到视图模型中的属性。该属性的类型必须与enumConverter 生成的项目的类型相匹配。

    【讨论】:

      【解决方案2】:

      您可以将 Combobox 的 SelectedItem 绑定到该属性。我在 ViewModel 中将属性重命名为 SelectedColorPropertyChanged 事件在 setter 中引发,因此当您更新属性时,例如,从 ViewModel 中的另一个方法更新属性时,会通知视图并使用新值进行更新。

      private Color _selectedColor;
      
      public Color SelectedColor 
      {
          get { return _selectedColor; }
          set
          {
              _selectedColor = value;
              if (PropertyChanged != null)
              {
                  PropertyChanged(this, new PropertyChangedEventArgs("SelectedColor"));
              }
          }
      }
      

      在 XAML 中

      <ComboBox ItemsSource="{Binding Colors, Converter={StaticResource enumConverter}}" 
          SelectedItem="{Binding SelectedColor}">
          ...
      

      【讨论】:

      • 非常感谢你们。实际上是@Joost Van Den Booms 行:“该属性的类型必须与 enumConverter 生成的项目的类型相匹配。”这使它起作用。在我的情况下,我不得不将类型更改为字符串。因此,即使我在我的项目中使用了您的两个建议,这次我也会接受他的回答。谢谢你们!
      • 啊是的。没问题。我试图重新创建您的问题,所以我编写了转换器,我使用 Enum.GetValues 返回 Enum 类型的数组,而不是字符串,因此代码运行顺利。
      • 你知道是否可以传递枚举的 Int 值而不是字符串名称吗?如果我的虚拟机上有一个可以捕获它的 In-property?那真是太好了。
      • 然后你可以绑定到 Combobox 的 SelectedIndex 属性,它是一个 int。
      猜你喜欢
      • 2016-10-28
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2011-08-04
      • 2018-11-12
      • 2020-02-07
      • 2016-02-06
      相关资源
      最近更新 更多