gpt4 book ai didi

c# - 如何使用 MVVM 在 WPF 中显示 ViewModel 中的 View 并设置该 View 的数据上下文

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:42 24 4
gpt4 key购买 nike

如何从 View 模型命令打开一个新 View (对话框),并使用其 View 模型设置新 View 的数据上下文。这个问题很困扰我,虽然有很多关于这个的问题,但到目前为止我对任何答案都不满意。

所以,假设:

我有一个名为 MainView 的启动对话框,我显示此对话框并在 App.xaml.cs (OnStartUp) 方法中设置其数据上下文。在 MainView 中,有一个名为“打开新对话框”的按钮,该按钮的命令与 MainViewModel 中的委托(delegate)命令绑定(bind)。因此,当用户点击此按钮时,命令会调用执行方法。
假设与 View 中的按钮绑定(bind)的 MainViewModel 中的命令如下

  public ICommand ShowNewDialogCommand
{
if(this._showNewDialogCommand == null)
{
this._showNewDialgoCommand = new DelegateCommand(ShowDialogFromVM);
}
}
private void ShowDialogFromVM()
{
}

假设我要显示的新对话框是 ListAllStudentsView,它的 ViewModel 是 StudentsViewModel。那么,在不违反 MVVM 模式的情况下显示此对话框的各种方法是什么?每种方法的优点和缺点是什么?

最佳答案

首先,我们需要创建一个 View (在某处)及其数据上下文集。很简单,我们实例化 View 并将 View 模型传递给它(假设 View 在其构造函数中设置其数据上下文)或手动设置它。如果我们愿意, View 也可以在 XAML 中声明 View 模型。

方法一:

Window dialog = new ListAllStudentsView(new StudentsViewModel());

方法二:

Window dialog = new ListAllStudentsView();
dialog.DataContext = new StudentsViewModel();

方法三:

<Window.DataContext>
<local:StudentsViewModel/>
</Window.DataContext>

现在我们需要将此代码(以及关联的 dialog.ShowDialog() 放在某处)。我看到两个选项,就在命令的执行函数中,或者在 View 的代码隐藏中(由命令的执行函数引发的事件触发,如“RequestDialog”)。

我更喜欢第一个,尽管它没有严格遵守 MVVM,因为它更简单、代码更少且更易于管理。但是,如果您想非常严格地遵守 MVVM,我会让 ViewModel 在 View 监听并运行构造函数和 ShowDialog() 函数的命令函数中引发类似“RequestDialog”的事件。

关于c# - 如何使用 MVVM 在 WPF 中显示 ViewModel 中的 View 并设置该 View 的数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332363/

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