簡體   English   中英

雙向綁定組合框到枚舉

[英]Two-way binding combobox to enum

我有一個使用DataTemplate鏈接到我的ViewModel的View,就像這樣

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

ViewModel包含MyEnum?類型的屬性ProcessOption MyEnum? ,其中MyEnum是一個自定義枚舉,讓我們說3個值: SingleMultipleAll 我正在嘗試將組合框綁定到此屬性,因此我遵循的方法是:

ViewModel具有List<string>的屬性

public List<string> Options
    {
        get 
        {
            return Enum.GetNames(typeof(MyEnum)).ToList();
        }
    }

我綁定ComboboxItemsSource屬性。 然后,除了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綁定,我認為SelectedItemSelectedValue是一個/或命題。

我建議您擺脫OptionName ,只需將SelectedItem綁定到ProcessOption (TwoWay),使用IValueConverter轉換為/從string轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM