2015-10-20 99 views
0

所以我有一個WPF MVVM應用程序。當我按下一個按鈕時,我想要將一個新條目添加到組合框的下拉列表中,並將組合框的所選項目設置爲該項目。我可以通過ObservableCollection將項目添加到下拉列表中,但似乎無法正確綁定SelectedItem。我曾嘗試:WPF MVVM將項目添加到組合框並更改selecteditem

<ComboBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" /> 

,並直接把中的SelectedItem在ViewModel在視圖模型執行INotifyPropertyChanged的。但這不起作用。有任何想法嗎?

編輯:我還應該補充說,OnNotifyPropertyChange事件不會在我期望的時候正確觸發,所以我不知道發生了什麼。我也嘗試使用UpdateSourceTrigger=PropertyChanged無濟於事。

回答

1

只是一個小的建議,以避免這種情況,你寫屬性incorect的名稱。

如果您使用的是.net 4.5,則可以使用CallerMemberName-在屬性OnPropertyChanged-方法中。這看起來像:

protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)

那麼你財產看起來像

public bool MyProperty 
{ 
    get{ return myProperty; } 
    set 
    { 
     myProperty=value; 
     OnPropertyChanged(); 
    } 
} 

你也可以寫,提取你的PROPERTYNAME了一個lambda表達式的方法。在基類中的方法是這樣的:

public static class Helper 
{ 
    public static string GetPropertyName<T>(Expression<Func<T>> expression) 
    { 
     return ((MemberExpression)expression.Body).Member.Name; 
    } 
} 

在財產的使用比看起來像:

public bool MyProperty 
{ 
    get{ return myProperty; } 
    set 
    { 
     myProperty = value; 
     OnPropertyChanged(Helper.GetPropertyName(() => MyProperty)); 
    } 
} 

有了這個方法,你有你的屬性名稱的編譯時檢查。

1

謝謝你們,我在OnNotifyPropertyChanged中寫下了屬性錯誤......好悲傷。

1

您還可以使用

OnPropertyChanged(nameof(MyProperty)); 

避免missspellings。

我開始使用FodyPropertyChanged,它注入OnPropertyChanged代碼會自動保存一些打字工作,並使代碼看起來很乾淨。