1. ホーム
  2. wpf

従属プロパティのプロパティ変更イベントを発生させるには?

2023-10-30 01:02:14

質問

2つのプロパティを持つコントロールがあります。1つは DependencyProperty で、もう1つは最初のプロパティのエイリアスです。 どのようにしたら PropertyChanged イベントを発生させることができます。

ノート : 私は DependencyObjects ではなく INotifyPropertyChanged (試したがうまくいかなかった。なぜなら私のコントロールは ListVie のサブクラス化されているため、動作しませんでした)。

こんな感じで......。

protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
    base.OnPropertyChanged(e);
    if (e.Property == MyFirstProperty)
    {
        RaiseAnEvent( MySecondProperty ); /// what is the code that would go here?
    }    
}

INotifyを使うなら、こんな感じかな。

public string SecondProperty
{
    get
    {
        return this.m_IconPath;
    }
}

public string IconPath
{
    get
    {
        return this.m_IconPath;
    }
    set
    {
        if (this.m_IconPath != value)
        {
            this.m_IconPath = value;
        this.SendPropertyChanged("IconPath");
        this.SendPropertyChanged("SecondProperty");
        }
    }
}

どこで PropertyChanged イベントを発生させることができますか? 同じことをするのに必要なのは DependencyProperties .

どのように解決するのですか?

  1. 実装 INotifyPropertyChanged を実装してください。

  2. 依存性プロパティを登録する際に、プロパティのメタデータにコールバックを指定する。

  3. コールバックでは PropertyChanged イベントを発生させます。

コールバックを追加する。

public static DependencyProperty FirstProperty = DependencyProperty.Register(
  "First", 
  typeof(string), 
  typeof(MyType),
  new FrameworkPropertyMetadata(
     false, 
     new PropertyChangedCallback(OnFirstPropertyChanged)));

上げる PropertyChanged をコールバックで発生させる。

private static void OnFirstPropertyChanged(
   DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
   PropertyChangedEventHandler h = PropertyChanged;
   if (h != null)
   {
      h(sender, new PropertyChangedEventArgs("Second"));
   }
}