繁体   English   中英

WPF 中的依赖属性和 PropertyChangedCallback 的问题

[英]Problem with Dependency Property and PropertyChangedCallback in WPF

在我的 CustomControl 中,我有 View 依赖项属性。 使用此控件的外部控件通过视图模型设置此属性。 设置后,触发刷新方法并呈现视图!

到目前为止一切都很好! 但是如果我还希望它在视图的属性更改时刷新怎么办。

也许我没有按照标准方式做? 我应该在控件上定义一个公共 Refresh() 方法并从外部调用它吗? 如何使用命令?

  public static readonly DependencyProperty ViewProperty =
     DependencyProperty.Register(
        "View", typeof(View),
        typeof(CustomControl), new PropertyMetadata(Refresh)
     );


  public View View
  {
     get => (View)GetValue(ViewProperty);
     set => SetValue(ViewProperty, value);
  }

  private static void Refresh(DependencyObject d, DependencyPropertyChangedEventArgs e)
  {
     // 
     MessageBox.Show("Refreshed!");
  }

   public sealed class View : INotifyPropertyChanged
   {
      private bool m_isDirty;

      public bool IsDirty
      {
         get => m_isDirty;
         set
         {
            m_isDirty = value;
            OnPropertyChanged();
         }
      }

      public event PropertyChangedEventHandler PropertyChanged;

      private void OnPropertyChanged([CallerMemberName] string propertyName = null)
      {
         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
      }
   }

您可以在回调中为ViewPropertyChanged事件连接一个事件处理程序:

private static void Refresh(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    MessageBox.Show("Refreshed!");

    View newView = e.NewValue as View;
    if (newView != null)
        newView.PropertyChanged += NewView_PropertyChanged;

    View oldView = e.OldValue as View;
    if (oldView != null)
        oldView.PropertyChanged -= NewView_PropertyChanged;
}

private static void NewView_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    View view = (View)sender;
    //view updated...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM