我有一个Silverlight应用程序,我在其中实现了MVVM模式。 在我的应用程序中有一个子窗口,我有ComboBox。我将我的组合框的ItemsSource和SelectedItem绑定到属性(typeof ObservableCollection)和MyType的属性。 MyType是从INotifyPropertyChanged派生的“MODEL”。当我的窗口加载时,我将值设置为此属性。但我的组合框不显示所选项目。 我发现当我设置绑定到所选项的属性(在ViewModel中)时,PropertyChanged事件为null。 谁能帮我。感谢。
答案 0 :(得分:0)
从您描述它的方式来看,唯一被绑定的是ViewModel,但实现INotifyPropertyChanged的唯一方法是MyType。实际上没有什么能够绑定到我的类型的实例来监听它的PropertyChanged事件,这就是它为null的原因。
听起来你没有在ViewModel上实现INotifyPropertyChanged。
答案 1 :(得分:0)
PropertyChanged运行正常,因此它必须在您的实现中。简单地实现INotifyProperty改变不够好,你必须明确地调用事件。
例如,这不起作用:
public class Model : INotifyPropertyChanged
{
public string Title { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
为了使其正常工作,您必须提高已更改的属性。最简单的方法是将逻辑封装在一个方法中,如下所示:
public class Model : INotifyPropertyChanged
{
private string _title;
public string Title
{
get { return _title; }
set
{
_title = value;
RaisePropertyChanged("Title");
}
}
protected void RaisePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
当然,您可以将事件和方法放在基类中继承,这样多个模型就可以利用它。