如何在mvvm wpf模型中处理中继命令

时间:2011-07-14 15:02:56

标签: wpf mvvm memory-leaks command

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

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

2)视图模型虽然处理掉了,但似乎仍然在内存中。它在顶部使用选项卡控件,即使关闭选项卡后内存也永远不会被清除。这与视图模型有关,因为一旦视图模型的属性设置为null,下次打开另一个选项卡时,视图模型将尝试访问已关闭的属性。仅供参考,此处不涉及单身人士。

它正在使用relay命令类,并且问题最终就在这里,即使目标对象没有引发它也会触发命令,即没有点击命令链接到的按钮但是当它关​​闭时它仍会触发它儿童之窗。

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分: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");
      }
   }
}