2015-10-20 86 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代码会自动保存一些打字工作,并使代码看起来很干净。