繁体   English   中英

依赖项属性已更改回调-多次触发

[英]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}" />

样品

  • 项目

    1. 点击“第二页”
    2. 点击“ true”(查看输出窗口)
    3. 回去
    4. 点击“第二页”
    5. 点击“假”(查看输出窗口)

这解决了我的问题。

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.

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