我有一个使用 DataTemplate 链接到我的 ViewModel 的视图,如下所示
<DataTemplate DataType="{x:Type ViewModels:ViewModel}">
<Views:View />
</DataTemplate>
ViewModel 拥有一个ProcessOption
类型为的属性MyEnum?
,其中MyEnum
是一个自定义枚举,假设有 3 个值Single
:Multiple
和All
。我正在尝试将组合框绑定到此属性,因此我遵循的方法是:
ViewModel 有一个属性List<string>
是
public List<string> Options
{
get
{
return Enum.GetNames(typeof(MyEnum)).ToList();
}
}
我ItemsSource
将Combobox
. 然后,除了ProcessOption
属性之外,ViewModel 还有一个OptionName
属性 (of string
),用于保存所选选项的名称。ViewModel 实现INotifyPropertyChanged
并且两个属性在其设置器中引发PropertyChanged
事件。我当时使用的绑定是:
<ComboBox ItemsSource="{Binding Options}"
SelectedItem="{Binding OptionName}"
SelectedValue="{Binding ProcessOption}"/>
到目前为止,这工作正常。最初,组合框是空的,两个属性都是null
,当用户选择一个选项时,它会按应有的方式传播到 ViewModel。
当我从数据库加载数据时出现问题,我想加载具有初始值的控件。在这种情况下,在 ViewModel 的构造函数中我有这个:
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)));
问题是,虽然上面将这两个属性设置为正确的值,但它们后来从Combobox
绑定中设置为 null,因此不保留初始值。我还尝试if (value == null) { return; }
在属性的设置器中执行类似操作,在这种情况下,它们在视图加载后具有正确的值,但是Combobox
仍然没有显示正确的选项,它是空的。
我还应该注意,我也尝试过设置IsSynchronisedWithCurrentItem
,除了显示第一个元素而不是组合框为空之外,它没有任何区别。
任何人都可以帮助这个绑定吗?任何帮助将不胜感激,这让我发疯!