[英]Dependency property changed callback - multiple firing
我想听听DependencyProperty的更改。 这段代码有效,但是在每次使用CustomControl重新加载页面后,都会多次调用回调方法...
public partial class CustomControl : UserControl
{
public CustomControl()
{
InitializeComponent();
}
public bool IsOpen
{
get { return (bool)GetValue(IsOpenProperty); }
set { SetValue(IsOpenProperty, value); }
}
public static readonly DependencyProperty IsOpenProperty =
DependencyProperty.Register("IsOpen", typeof(bool), typeof(CustomControl), new PropertyMetadata(IsOpenPropertyChangedCallback));
private static void IsOpenPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
Debug.WriteLine("Fire!");
}
}
更新资料
视图模型
private bool _isOpen;
public bool IsOpen
{
get { return this._isOpen; }
set { this.Set(() => this.IsOpen, ref this._isOpen, value); } // MVVM Light Toolkit
}
视图
<local:CustomControl IsOpen="{Binding Path=IsOpen}" />
样品
这解决了我的问题。
this.Unloaded += CustomControlUnloaded;
private void CustomControlUnloaded(object sender, RoutedEventArgs e)
{
this.ClearValue(CustomControl.IsOpenProperty);
}
听起来好像触发事件的次数与打开带有控件的页面的次数有关。 这表明您有该页面的多个实例。
那么,问题实际上是您的页面正在执行某些操作以阻止其被正确破坏。
不幸的是,如果看不到代码,就无法说出是什么原因造成的。 可能您已经在代码中订阅了一个事件,但是并未取消订阅该事件。 (我在电话应用程序中看到了很多。)
发生的事情是SecondPageView
被多次加载。 每次创建新实例时,它都会绑定到数据上下文并从视图模型中检索IsOpen
的值。 然后设置依赖项属性。
这实际上是所需的行为。 如果没有再次设置属性,则视图模型的状态将不会反映在页面中。 无法使用手机的本机导航API转发到旧页面实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.