Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf MVVM-如何基于列表中的选定项打开窗口?_Wpf_Mvvm - Fatal编程技术网

Wpf MVVM-如何基于列表中的选定项打开窗口?

Wpf MVVM-如何基于列表中的选定项打开窗口?,wpf,mvvm,Wpf,Mvvm,我对WPF&MVVM的世界还很陌生,在过去的几天里,我尽可能多地下载教程,并尽可能多地阅读 然而,我正在努力用MVVM实现一个非常基本和通用的概念,我迫切需要一些帮助,甚至可能需要一个例子:) 我已经掌握了M-V-VM、指挥甚至信息传递的基本知识;但是如何在earch上打开一个新窗口并将该窗口的ViewModel设置为列表框的选定项呢 让我解释一下: 我有一个叫做Client的模型,它有一些属性 然后,我有一个ViewModel,它获取所有客户机并将它们存储在一个ObservableCollec

我对WPF&MVVM的世界还很陌生,在过去的几天里,我尽可能多地下载教程,并尽可能多地阅读

然而,我正在努力用MVVM实现一个非常基本和通用的概念,我迫切需要一些帮助,甚至可能需要一个例子:)

我已经掌握了M-V-VM、指挥甚至信息传递的基本知识;但是如何在earch上打开一个新窗口并将该窗口的ViewModel设置为列表框的选定项呢

让我解释一下: 我有一个叫做Client的模型,它有一些属性 然后,我有一个ViewModel,它获取所有客户机并将它们存储在一个ObservableCollection中 我有一个屏幕,可以在列表框中显示姓名,并允许用户进行筛选和搜索

以上所有工作都很完美

当用户选择某个项目时,我想打开该特定客户机的可编辑“详细客户机视图”屏幕。此详细屏幕的ViewModel需要以某种方式绑定到所选项目(如果有意义的话);或者我需要能够将一个参数传递给新打开的屏幕的ViewModel。事实上,如果用户可以同时打开多个细节屏幕并编辑多个clint,那就太棒了

如果有人能给我一个很好的例子,或者给我指出正确的方向,我真的会很棒

非常感谢,,
Brendan

我将向列表框添加一个事件。SelectionChanged执行以下操作:

  • 创建新对话框和DialogViewModel
  • 将DialogViewModel.EditableContentProperty绑定到列表框的SelectedItem
  • Dialog.DataContext=DialogViewModel
  • Dialog.ShowDialog()
    • 简单地说:

      //Create the Client Detail form
      frmClientDetails frm = new frmClientDetails();
      frm.Owner = this;
      var ViewModel = new ClientDetailViewModel((Client)lstFoundClients.Items.CurrentItem);
      frm.DataContext = ViewModel;
      frm.Show();
      

      谢谢你,瑞秋,我有点走对了。我已经为我的DetailViewModel创建了一个构造函数,并将其绑定到listview双击背后代码中的DetailForms datacontext。很明显,我并没有“点击”过可以用这样的代码创建和绑定viewmodels…你真的不应该这样做,除非你的对话框足够琐碎,以至于创建一个对话框视图模型会浪费代码。理想情况下,您所有的表示逻辑都在视图模型中,包括导航,例如旋转新视图和视图模型。即使您希望完全在视图模型中进行,我也会以类似的方式进行。主要区别在于ListBox.SelectionChanged将指向ViewModel命令,代码将位于VM中,而不是隐藏的代码。如果从ViewModel中打开窗口/表单,可以设置所有者属性吗?还有什么?我有一些代码使用“this.OwnedWindows”在某些情况下激活windows。我有一个类似的情况,用户单击网格行上的编辑按钮。这将调用网格视图模型上的
      EditRow
      命令,该命令创建一个新的编辑对话框,并将行视图模型传递给它的构造函数。它不需要无参数构造函数,因为如果参数为null,我可以传递null并创建一个新的细节视图模型。