[英]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));
}
}
您可以在回调中为View
的PropertyChanged
事件连接一个事件处理程序:
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.