簡體   English   中英

如何使用虛線路徑作為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()的propertyName?

Age設置器,您應該始終調用OnPropertyChanged("Age")

INotifyPropertyChanged不適用於子屬性。 您還不需要在UserControl上使用它,因為依賴項屬性已經提供了通知。 Person類中修復OnPropertyChanged調用后,就可以了。

您可以通過以下幾種方式修復Person.Age設置器:

  1. 調用OnPropertyChanged("Age") (並在OnPropertyChanged簽名中刪除= null

  2. 如果您面向.NET 4.5或更高版本,則首選解決方案是將Person.OnPropertyChanged簽名更改為Person.OnPropertyChanged OnPropertyChanged(string [CallerMemberName] propertyName = null) 然后從Age設置器調用OnPropertyChanged()會將設置的propertyName填充為Age 有關更多詳細信息,請參見此博客文章MSDN文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM