对于我的项目,我需要知道哪个View正在使用我的ViewModel
所以我创建了这个ViewModel:
public class HistoriqueViewModel : INotifyPropertyChanged
{
public HistoriqueViewModel(MetroWindow view)
{
this.MetroWindow = view;
this.ExportCommand = new RelayCommand(Export_Ex);
}
private MetroWindow _metroWindow;
public MetroWindow MetroWindow
{
get { return _metroWindow; }
set
{
if (Equals(value, _metroWindow)) return;
_metroWindow = value;
OnPropertyChanged();
}
}
//.........
}
在View构造函数中:
public partial class ViewHisto : MetroWindow
{
public ViewHisto()
{
InitializeComponent();
DataContext=new HistoriqueMV(this) ;
}
}
它对我来说很完美,但我想知道这是否打破了MVVM模式?
答案 0 :(得分:3)
是的,这打破了MVVM。正确构建的视图模型不应该关心视图是什么。
您的代码中没有任何内容真正暗示为什么您正在传递该引用(除了将视图公开为公共属性,这是一个甚至更大 no-no)但有几种方法:
上述任何一种方法都可以提供比你正在使用的方法更好的解耦。
另一件事,它的“视图模型”,而不是“模型视图”