如何使用虚线路径作为 PropertyChangedEventHandler 的 属性 名称?
How can I use a dotted path as a property name of a PropertyChangedEventHandler?
如何使用虚线路径作为 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
setter,你应该总是调用OnPropertyChanged("Age")
。
INotifyPropertyChanged
不适用于子属性。您也不需要在 UserControl 上使用它,因为依赖属性已经提供了通知。一旦你在 Person
class 中修复你的 OnPropertyChanged
调用,你应该没问题。
您有几个选项可以修复 Person.Age
setter:
调用OnPropertyChanged("Age")
(并删除OnPropertyChanged
签名中的= null
。
如果您的目标是 .NET 4.5 或更高版本,首选解决方案是将 Person.OnPropertyChanged
签名更改为 OnPropertyChanged(string [CallerMemberName] propertyName = null)
。从 Age
setter 调用 OnPropertyChanged()
将填充集合 propertyName
到 Age
。有关详细信息,请参阅 this blog post or the MSDN documentation。
如何使用虚线路径作为 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
setter,你应该总是调用OnPropertyChanged("Age")
。
INotifyPropertyChanged
不适用于子属性。您也不需要在 UserControl 上使用它,因为依赖属性已经提供了通知。一旦你在 Person
class 中修复你的 OnPropertyChanged
调用,你应该没问题。
您有几个选项可以修复 Person.Age
setter:
调用
OnPropertyChanged("Age")
(并删除OnPropertyChanged
签名中的= null
。如果您的目标是 .NET 4.5 或更高版本,首选解决方案是将
Person.OnPropertyChanged
签名更改为OnPropertyChanged(string [CallerMemberName] propertyName = null)
。从Age
setter 调用OnPropertyChanged()
将填充集合propertyName
到Age
。有关详细信息,请参阅 this blog post or the MSDN documentation。