虚线路径作为 PropertyChangedEventHandler 的属性名称?
public class Person
{
private int _age;
public int Age
{
get { return _age;}
set
{
_age = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public partial class MyControl : UserControl, INotifyPropertyChanged
{
public Person Person
{
get { return (Person)GetValue(PersonProperty); }
set { SetValue(PersonProperty, value); }
}
public static DependencyProperty PersonProperty =
DependencyProperty.Register("Person", typeof (Person), typeof (MyControl), null);
private void someMethod()
{
OnPropertyChanged("Person.Age");
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
<TextBox Text="{Binding Person.Age, Mode=TwoWay}"/>
但是 OnPropertyChanged("Person.Age") 无法解析该符号。
是否可以使用虚线路径作为 OnPropertyChanged() 的属性名称?
Age
二传手,你应该总是称OnPropertyChanged("Age")
。
INotifyPropertyChanged
不适用于子媒体资源。在 UserControl 上也不需要它,因为依赖项属性已提供通知。一旦你在Person
类中修复了OnPropertyChanged
调用,你应该没事。
您有几个选项可以修复Person.Age
资源库:
-
调用
OnPropertyChanged("Age")
(并删除OnPropertyChanged
签名中的= null
。 -
如果面向 .NET 4.5 或更高版本,首选解决方案是将
Person.OnPropertyChanged
签名更改为OnPropertyChanged(string [CallerMemberName] propertyName = null)
。然后,从Age
二传手调用OnPropertyChanged()
将填充集合propertyName
以Age
。有关更多详细信息,请参阅此博客文章或 MSDN 文档。