【发布时间】:2013-08-16 05:22:23
【问题描述】:
我有一个具有复杂属性类型的 ViewModel,并希望将我的视图绑定到该对象的嵌套属性。
我的 ViewModel 正在实现 INotifyPropertyChanged(或者确切地说,BaseViewModel 正在实现它)。父属性的类没有实现INotifyPropertyChanged。
类 Car 没有实现 INotifyPropertyChanged。但是我没有更改Manufacturer属性,我更改了MyCarProperty属性,所以我希望OnNotifyPropertyChanged事件会触发值更新?
当我更新父属性的值时,嵌套属性没有更新。你能告诉我如何实现这个功能吗?
视图模型
public class ViewModel : BaseViewModel
{
private Car _myCarProperty;
public Car MyCarProperty
{
get { return _myCarProperty; }
set
{
if (value == _myCarProperty) return;
_myCarProperty = value;
OnPropertyChanged();
}
}
}
在视图中绑定
<TextBlock Text="{Binding Path=MyCarProperty.Manufacturer}" />
当我更改 MyCarProperty 的值时,视图不会更新。
感谢您的帮助!
编辑:OnPropertyChanged() 实现
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion INotifyPropertyChanged
【问题讨论】:
-
您通知子属性了吗?
-
类
Car没有实现INotifyPropertyChanged。但是我没有更改属性Manufacturer,我更改了MyCarProperty属性,所以我希望OnNotifyPropertyChanged 事件会触发值更新? - 请查看我编辑的问题。 -
您能告诉我们 OnPropertyChanged 是如何实现的吗?
-
我添加了 OnPropertyChanged 实现。
-
@FelixC 是你的
BaseViewModel告诉编译器它正在实现 INotifyPropertyChanged,例如public class BasseViewModel: INotifyPropertyChanged?当我做了一个小模型时,你的例子似乎奏效了。