双向绑定组合框到枚举

时间:2012-04-27 13:18:17

标签: c# wpf combobox enumeration

我有一个使用DataTemplate链接到我的ViewModel的View,就像这个

一样
<DataTemplate DataType="{x:Type ViewModels:ViewModel}">
    <Views:View />
</DataTemplate>

ViewModel包含ProcessOption类型的属性MyEnum?,其中MyEnum是一个自定义枚举,可以说3个值:Single,{{1} }和Multiple。我正在尝试将组合框绑定到此属性,因此我遵循的方法是:

ViewModel的属性为All

List<string>

我绑定了public List<string> Options { get { return Enum.GetNames(typeof(MyEnum)).ToList(); } } 的{​​{1}}属性。然后,除ItemsSource属性外,ViewModel还具有Combobox属性(ProcessOption),用于保存所选选项的名称。 ViewModel实现OptionName,两个属性都会在其setter中引发string事件。我正在使用的绑定是:

INotifyPropertyChanged

到目前为止,此工作正常。最初组合框是空的,两个属性都是PropertyChanged,当用户选择一个选项时,它会按原样传播到ViewModel。

当我从数据库加载数据时出现问题,我想用初始值加载控件。在这种情况下,在ViewModel的构造函数中我有:

<ComboBox ItemsSource="{Binding Options}"
    SelectedItem="{Binding OptionName}"
    SelectedValue="{Binding ProcessOption}"/>

问题是,尽管上面将两个属性设置为正确的值,但它们稍后会从null绑定设置为null,因此不保留初始值。我还尝试在属性的setter中执行类似this.ProcessOption = objectFromDB.ProcessOption // this is the value restored from DB, let's say it is MyEnum.Multiple this.OptionName = Options.First(x => x.Equals(Enum.GetName(typeof(MyEnum), objectFromDB.ProcessOption))); 的操作,在这种情况下,它们在View加载后具有正确的值,但是Combobox仍然没有显示正确的选项,它是空的

我还应该注意到,我还尝试设置if (value == null) { return; }并且它没有任何区别,除了显示第一个元素而不是组合框是空的这一事实。

任何人都可以帮助这个绑定吗?任何帮助将非常感激,这让我发疯!

1 个答案:

答案 0 :(得分:0)

<ComboBox ItemsSource="{Binding Options}"
    SelectedItem="{Binding OptionName}"
    SelectedValue="{Binding ProcessOption}"/>

你的绑定看起来根本不适用 - 你没有设置TwoWay绑定,我认为SelectedItemSelectedValue是一个/或命题。

我建议您摆脱OptionName并将SelectedItem绑定到ProcessOption(TwoWay)并IValueConverter转换为string