【问题标题】:How to dispose off the relay command in mvvm wpf model如何在 mvvm wpf 模型中处理掉中继命令
【发布时间】:2011-10-05 10:34:52
【问题描述】:

我有这个应用程序使用 MVVM wpf 模型以及 John Smith 的中继命令类。它有两个主要问题:

1) 即使在处理视图模型并将命令设置为 null 之后,它们仍然会在之后被触发。

2) 视图模型虽然已关闭,但似乎仍在内存中。它在顶部使用选项卡控件,即使关闭选项卡,内存也不会被清理。这与视图模型有关,因为一旦视图模型的属性设置为 null,下次您打开不同的选项卡时,视图模型会尝试访问已释放的属性。仅供参考,这里不涉及单例。

它正在使用中继命令类,问题最终出在命令被触发的地方,即使目标对象没有提升它,即命令链接到的按钮没有被点击,但它在关闭它时仍然触发它子窗口。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • “将命令设置为空”是什么意思? ViewModel 上的命令属性设置为空?

标签: wpf mvvm memory-leaks command


【解决方案1】:

在将命令属性设置为 null 后引发 PropertyChanged 事件。

public class ViewModel : INotifyPropertyChanged, IDisposable
{
   public event PropertyChangedEventHandler PropertyChanged;
   public void Dispose()
   {
      Command = null;
   }

   public RelayCommand Command
   {
      get{return m_command;}
      set
      {
         if(m_command == value)
            return;
         m_command = value;
         if (PropertyChanged != null)
            PropertyChanged (this, new PropertyChangedEventArgs ("Command");
      }
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2021-12-28
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2013-10-12
    • 2016-05-03
    相关资源
    最近更新 更多