有没有办法让新窗口使用与 MainWindow 相同的 ViewModel?这样做的原因是我有一个数据网格,我想插入、删除项目、更新等。但是,当涉及到插入时,我想在一个单独的窗口中进行,就像你点击一样,打开另一个窗口并从那里插入。但据我所见,两个 View 不可能使用相同的 ViewWModel。有任何想法吗?
问问题
582 次
2 回答
0
从技术上讲,这是完全可能的,而且很容易做到。假设您有两个窗口 Window1 和 Window2。
你可以在 Window1.xaml.cs 中有这个代码:
void BtnOpenNewWindow_Click(object sender, EventArgs e)
{
var window2= new Window2();
window2.DataContext = this.DataContext;
window2.Show();
}
或 Window1ViewModel.cs 中的这段代码
void OpenNewWindowCommand_Execute()
{
var window2= new Window2();
window2.DataContext = this;
window2.Show();
}
但是,这是否是好的做法值得怀疑。有更好的方法可以在视图模型之间共享代码或数据。实际上它不仅仅与视图模型有关,它们是一般的 OOP 原则。
要在视图模型之间共享代码,您可以使用继承:
abstract CommonViewModel
Window1ViewModel extends CommonViewModel
Window2ViewModel extends CommonViewModel
如您所见,它保持视图和视图模型之间的 1:1 关系。
要在视图模型之间共享数据,您可以引用来自不同视图模型的单个实例
var common = new CommonDataOrLogic(); //this is usually model
var viewmodel1 = Window1ViewModel(common);
var viewmodel2 = Window2ViewModel(common);
您可以使用很多模式:Singleton、ServiceLocator、IoC、EventAggregator 等。
于 2016-07-01T07:51:44.087 回答
-1
我希望,
如果将新窗口的所有者设置为 MainWindow 意味着新窗口可以使用 MainWindow 的视图模型。
例如,
Window newWindow= new Window();
newWindow.Owner = App.Current.MainWindow;
于 2016-07-01T07:28:05.003 回答