C# 依赖项属性已更改回调-多次触发
我想听听从属财产的变化。这段代码可以工作,但每次使用CustomControl重新加载页面后,都会多次调用回调方法C# 依赖项属性已更改回调-多次触发,c#,windows-phone-8,C#,Windows Phone 8,我想听听从属财产的变化。这段代码可以工作,但每次使用CustomControl重新加载页面后,都会多次调用回调方法 public partial class CustomControl : UserControl { public CustomControl() { InitializeComponent(); } public bool IsOpen { get { return (bool)GetValue(IsOpe
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
}
看法
样本
- 点击“第二页”
- 点击“真”(查看输出窗口)
- 回去
- 点击“第二页”
- 点击“false”(查看输出窗口)
不幸的是,如果看不到代码,就不可能说出是什么导致了这种情况。这可能是因为您在代码中订阅了一个事件,而没有取消订阅。(我在手机应用程序中看到了很多。)发生的事情是,
SecondPageView
被多次加载。每次创建新实例时,它都会绑定到数据上下文,并从视图模型中检索IsOpen
的值。然后设置依赖项属性
这实际上是期望的行为。如果没有再次设置属性,视图模型的状态将不会反映在页面中。无法使用手机的本机导航API向前导航到旧页面实例。这解决了我的问题
this.Unloaded += CustomControlUnloaded;
private void CustomControlUnloaded(object sender, RoutedEventArgs e)
{
this.ClearValue(CustomControl.IsOpenProperty);
}
XAML在哪里?你有这个属性的绑定吗?我已经添加了更多信息。好的,我明白了。。。我能对这种行为做些什么吗?这绝对是有道理的。这件事在我身上发生过一两次,我一直跟踪到在我应该删除事件处理程序的时候没有删除它。我在寻找侵蚀我记忆的东西。通过这样做来解决问题。
this.Unloaded += CustomControlUnloaded;
private void CustomControlUnloaded(object sender, RoutedEventArgs e)
{
this.ClearValue(CustomControl.IsOpenProperty);
}