Wpf Josh smith MVVM模式大问题

Wpf Josh smith MVVM模式大问题,wpf,mvvm,Wpf,Mvvm,我正在使用Josh Smith创建项目 但有一个问题。相同的工作区显示相同的操作。我的视图包含选项卡控件。创建2个或更多相同的工作区后,当我从任何工作区更改tabcontrol的选定索引时,其他相同的工作区tabcontrol显示相同的结果 我在Josh smith样本项目中接受测试。但和我的项目一样。如果你想展示。从和在MainWindowViewModel.cs上下载Josh smith代码更改以下代码 void ShowAllCustomers() {

我正在使用Josh Smith创建项目

但有一个问题。相同的工作区显示相同的操作。我的
视图
包含选项卡控件。创建2个或更多相同的工作区后,当我从任何工作区更改tabcontrol的选定索引时,其他相同的工作区tabcontrol显示相同的结果

我在Josh smith样本项目中接受测试。但和我的项目一样。如果你想展示。从和在MainWindowViewModel.cs上下载Josh smith代码更改以下代码

void ShowAllCustomers()
        {
            AllCustomersViewModel workspace = null;
                this.Workspaces.FirstOrDefault(vm => vm is AllCustomersViewModel)
                as AllCustomersViewModel;

            if (workspace == null)
            {
                workspace = new AllCustomersViewModel(_customerRepository);
                this.Workspaces.Add(workspace);
            }

            this.SetActiveWorkspace(workspace);
        }

然后运行代码并打开2个或更多所有客户视图,并更改列表视图列顺序。所有打开的
所有客户视图
显示相同的结果


如何解决这个问题

如果我可以引用Cinch的创建者Sacha Barber的话,请参阅“工作空间:特别注意事项”一节,从它的声音中,您可能会遇到同样的问题,但我也在学习,所以我可能是错的

“现在所有这些都很伟大,但不幸的是WPF在我们的道路上以TabControl的形式抛出了一些奇怪的东西。这是一个混蛋的控件。你们中有多少人知道在WPF中TabControls VisualTree只在VisualTree中保留选中的项


这听起来不好吗?不,请再想一想(虽然这只是使用DataTemplates时的一个问题,但直接选项卡项/视图组合是可以的)。因此,我们有几个视图使用MeffedMVVM在TabControl中创建视图模型。然后,我们更改选项卡,猜测视图被破坏的内容,当我们返回到上一个TabItem时,正如我们使用View 1st和MeffedMVVM一样,会为视图创建一个新的视图模型。”

如果我可以引用Cinch的创建者Sacha Barber的话,请看“工作空间:特别注意事项”一节,你可能也有同样的问题,但我也在学习,所以我可能是错的

“现在所有这些都很伟大,但不幸的是WPF在我们的道路上以TabControl的形式抛出了一些奇怪的东西。这是一个混蛋的控件。你们中有多少人知道在WPF中TabControls VisualTree只在VisualTree中保留选中的项


这听起来不好吗?不,请再想一想(虽然这只是使用DataTemplates时的一个问题,但直接选项卡项/视图组合是可以的)。因此,我们有几个视图使用MeffedMVVM在TabControl中创建视图模型。然后,我们更改选项卡,猜测视图被破坏的内容。当我们返回到上一个TabItem时,由于我们使用View 1st和MeffedMVVM,将为视图创建一个新的视图模型。“

我不确定是否理解您的意思,但是我有一个问题,在添加工作区时没有选择新选项卡。将TabControl上的IsSynchronisedWithCurrentItem属性设置为True为我解决了这个问题。

我不确定我是否理解您的意思,但我遇到了一个问题,即添加工作区时没有选择新选项卡。将TabControl上的IsSynchronisedWithCurrentItem属性设置为True为我解决了这个问题

void ShowAllCustomers()
        {
            AllCustomersViewModel workspace = null;

            workspace = new AllCustomersViewModel(_customerRepository);
            this.Workspaces.Add(workspace);            

            this.SetActiveWorkspace(workspace);
        }