[英]Two-way binding combobox to enum
我有一個使用DataTemplate鏈接到我的ViewModel的View,就像這樣
<DataTemplate DataType="{x:Type ViewModels:ViewModel}">
<Views:View />
</DataTemplate>
ViewModel包含MyEnum?
類型的屬性ProcessOption
MyEnum?
,其中MyEnum
是一個自定義枚舉,讓我們說3個值: Single
, Multiple
和All
。 我正在嘗試將組合框綁定到此屬性,因此我遵循的方法是:
ViewModel具有List<string>
的屬性
public List<string> Options
{
get
{
return Enum.GetNames(typeof(MyEnum)).ToList();
}
}
我綁定Combobox
的ItemsSource
屬性。 然后,除了ProcessOption
屬性之外,ViewModel還具有OptionName
屬性( string
),用於保存所選選項的名稱。 ViewModel實現了INotifyPropertyChanged
,這兩個屬性都會在其setter中引發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; }
if (value == null) { return; }
在屬性制定者,在這種情況下,他們有查看加載后正確的價值觀,但在Combobox
仍然沒有顯示正確的選項,它是空的。
我還應該注意到,我還嘗試設置IsSynchronisedWithCurrentItem
,除了顯示第一個元素而不是組合框為空之外,它沒有任何區別。
任何人都可以幫助這個綁定嗎? 任何幫助將非常感激,這讓我發瘋!
<ComboBox ItemsSource="{Binding Options}"
SelectedItem="{Binding OptionName}"
SelectedValue="{Binding ProcessOption}"/>
你的綁定看起來不應該起作用 - 你沒有設置TwoWay綁定,我認為SelectedItem
和SelectedValue
是一個/或命題。
我建議您擺脫OptionName
,只需將SelectedItem
綁定到ProcessOption
(TwoWay),使用IValueConverter
轉換為/從string
轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.