gpt4 book ai didi

c# - 如何在两个或多个 View 中共享单个Viewmodel?

转载 作者:行者123 更新时间:2023-12-03 10:55:18 25 4
gpt4 key购买 nike

我知道在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com