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

10-12 02:05