我知道在MVVM中,不应在 View 之间使用viewModel,但我的应用程序需要它。所以我有一个 View 和对应的ViewModel
说出LinkView和LinkViewModel
在LinkWindow构造函数中
public LinkWindow(string path)
{
InitializeComponent();
LinkViewModel vm = new LinkViewModel(path);
this.DataContext = vm;
}
因此,初始化了LinkWindow及其对应的LinkViewModel。现在,在LinkWindow中,我有一个按钮,它将弹出另一个窗口(按需要),但是我需要相同的viewModel实例(vm)
该按钮实现Command
"LinkEmailCommand"
LinkEmailCommand = new Command(DoEmailCommand, false);
在
LinkViewModel
中private void DoEmailCommand()
{
var EmailWindow = new EmailWindow();
EmailWindow.Show();
}
此EmailWindow不使用已经初始化的LinkViewModel。我怎么做?
编辑-解决方案:
所以解决方案是在构造函数中传递“this”
在
LinkViewModel
中private void DoEmailCommand()
{
var EmailWindow = new EmailWindow(this);
EmailWindow.Show();
}
然后在LinkWindow中在构造函数之一中传递viewModel对象
public LinkWindow(LinkViewModel vm)
{
InitializeComponent();
Title = FilrUI.Properties.Resources.ShareFilrEmail;
this.DataContext = vm;
}
现在,可以在两个 View 中使用 View 模型的单个实例。
最佳答案
在其他类中创建viewModel,然后将其传递给两个 View 构造函数:)
public LinkWindow(string path, object viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
}
在第二个 View 中也是如此。只需使用相同的viewModel对象实例
关于c# - 如何在两个或多个 View 中共享单个Viewmodel?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21621711/