Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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_User Interface_Mvvm_Commandbinding - Fatal编程技术网

Wpf MVVM-删除记录时关闭选项卡

Wpf MVVM-删除记录时关闭选项卡,wpf,user-interface,mvvm,commandbinding,Wpf,User Interface,Mvvm,Commandbinding,我真的不知道如何以最好的MVVM方式做到这一点 基本上,我的主应用程序会打开一个搜索窗口,在一个选项卡面板中显示所有记录。然后,如果双击一条记录,将打开一个新选项卡,其中包含该记录。现在,我试图保留MVVM,但我一辈子都搞不清楚当有人删除记录时如何关闭gui选项卡项(如果记录消失了,为什么要保持它打开) 我现在唯一能弄明白怎么做的方法是将TabItem的实例作为DeleteCommand的参数传递,这对我来说似乎是一个很大的禁忌,但我一辈子都无法弄清楚如何做到这一点。如果你想在真正的MVVM意义

我真的不知道如何以最好的MVVM方式做到这一点

基本上,我的主应用程序会打开一个搜索窗口,在一个选项卡面板中显示所有记录。然后,如果双击一条记录,将打开一个新选项卡,其中包含该记录。现在,我试图保留MVVM,但我一辈子都搞不清楚当有人删除记录时如何关闭gui选项卡项(如果记录消失了,为什么要保持它打开)


我现在唯一能弄明白怎么做的方法是将TabItem的实例作为DeleteCommand的参数传递,这对我来说似乎是一个很大的禁忌,但我一辈子都无法弄清楚如何做到这一点。

如果你想在真正的MVVM意义上做到这一点,那么在幕后双击一条记录,将记录添加到记录集合。该记录集合是控件中选项卡的数据源。简单地从列表中删除该项(通常是
可观察集合
)将导致UI更新和选项卡被删除

您当前使用哪种方法显示选项卡


编辑(回应评论):


这不是“真实的”MVVM。标签是否不仅仅是记录并不重要。您应该创建抽象这些细节的视图模型,然后将视图模型实例(RecordViewModel、ReportViewModel等)放在可观察的集合中并绑定到该集合。根据当前选项卡绑定到的视图模型类型,使用datatemplates为每个选项卡的内容呈现正确的视图。

如果要在真正的MVVM意义上执行此操作,则双击记录将在幕后向记录集合添加一条记录。该记录集合是控件中选项卡的数据源。简单地从列表中删除该项(通常是
可观察集合
)将导致UI更新和选项卡被删除

您当前使用哪种方法显示选项卡


编辑(回应评论):


这不是“真实的”MVVM。标签是否不仅仅是记录并不重要。您应该创建抽象这些细节的视图模型,然后将视图模型实例(RecordViewModel、ReportViewModel等)放在可观察的集合中并绑定到该集合。根据当前选项卡绑定到的视图模型类型,使用datatemplates为每个选项卡的内容呈现正确的视图。

Josh Smith写了一篇描述MVVM工作原理的精彩文章。示例应用程序执行的操作与您想要执行的操作非常相似

应用程序将显示一个选项卡控件,其中显示一个或多个工作空间。工作区区域显示两种不同的项目。选项卡项是可关闭的。看一看,我相信这会解决你的问题


Josh Smith写了一篇精彩的文章,描述了MVVM的工作原理。示例应用程序执行的操作与您想要执行的操作非常相似

应用程序将显示一个选项卡控件,其中显示一个或多个工作空间。工作区区域显示两种不同的项目。选项卡项是可关闭的。看一看,我相信这会解决你的问题


我只需创建一个TabItem并将其添加到TabCollection中。我之所以这样做,是因为选项卡可以不仅仅是记录。可以是包含报表(rdlc)的选项卡,也可以是包含SearchAllView的选项卡,等等。我只需创建一个TabItem并将其添加到TabCollection。我之所以这样做,是因为选项卡可以不仅仅是记录。可以是包含报表(rdlc)的选项卡,也可以是包含SearchAllView的选项卡,等等。