c# - 如何在 C# MVVM 中打开另一个窗口?

标签 c# wpf mvvm

我有一个简单的问题: 在我的应用程序中,我有一个“mainview”/主窗口。 由此用户可以控制所有的事情,如数据库查询、搜索等。

但我需要通过单击菜单按钮来打开属性窗口。

所以我将它绑定(bind)到我的 SearchWindowCommand:

private ICommand searchwindowcommand;

       public ICommand SearchWindowCommand
       {
           get
           {
               if (searchwindowcommand == null)
               {
                   searchwindowcommand = new RelayCommand(p => ExcecuteSearchwindowcommand());
               }
               return searchwindowcommand;
           }
       }

       public void ExcecuteSearchwindowcommand()
       {


       }

通常我会像这样打开它:(我让应用程序正常工作,但我没有使用 mvvm,现在我必须重做应用程序并找出 mvvm :) )

 public void auswahl_click(object sender, RoutedEventArgs e)
        {
            Einstellungen suchwindow = new Einstellungen();
            app_config_load(suchwindow);
            suchwindow.Show();

        }

我必须在执行命令中写入什么才能显示另一个窗口? 我应该为另一个 View 创建一个新的 View 模型吗? (我想是的?)

编辑: 我的启动应用程序代码:

 public partial class MainWindow : Window

{
    public MainWindow()
    {
        InitializeComponent();
        SetupBindings();
    }

    private void SetupBindings()
    {
        pViewModelList viewModel = new pViewModelList();

        personlistview.DataContext = viewModel;
    }

}

最佳答案

And should i create a new viewmodel for the other view? (i guess yes?)

是的。

What do i have to write into my Executecommand to show up the other window?

在这种情况下,我通常做的是,在 ViewModel 中引发一个事件。 View 将一个处理程序附加到该事件,并且实际的 ShowDialog() 在此处理程序中执行。

这里有一些伪代码展示了这个想法:

// ViewModel
public class MainViewModel
{
    public event EventHandler<EventArgs<UpdateViewModel>> UpdateRequested;

    private void ExecuteUpdate()
    {
        if (this.UpdateRequested != null)
        {
            var childVm = new UpdateViewModel(/* parameters related to the object being updated */);
            this.UpdateRequested(this, new EventArgs<UpdateViewModel>(childVm));
        }
    }
}

// View
public class MainView
{
    public MainView()
    {
        var vm = new MainViewModel();
        this.DataContext = vm;

        vm.UpdateRequested += (sender, e) =>
        {
            var updateView = new UpdateView();
            updateView.DataContext = e.Data;    // Gets the instance of the viewModel here

            updateView.ShowDialog();
        };
    }
}

关于c# - 如何在 C# MVVM 中打开另一个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529595/

相关文章:

events - 事件聚合器和集合

c# - 无法从 Azure Function 应用程序的 Nuget 安装 ApplicationInsights

c# - 编码 UTF-7 的 StreamWriter 问题

C# SQL 语句 - 查询中的语法错误。不完整的查询子句

WPF TreeView 不显示箭头

c# - 在CodeBehind中获取ListViewItem控件

c# - wpf检查列表框

c# - 跨多个控件实现 INotifyPropertyChanged 的​​优雅方式

.net - PropertyChangedCallback 执行的顺序

c# - Xamarin 表单绑定(bind)到对象属性