代码之家  ›  专栏  ›  技术社区  ›  ebattulga

Josh smith MVVM模式大问题

  •  1
  • ebattulga  · 技术社区  · 14 年前

    我正在用乔希·史密斯创建项目 THE MODEL-VIEW-VIEWMODEL (MVVM) DESIGN PATTER FOR WPF

    但有一个问题。相同的工作区显示相同的操作。我的 VIEW 包含TabControl。在创建两个或多个相同的工作区之后,当我从任何工作区更改tabcontrol的选定索引时,其他相同的工作区tabcontrol显示相同的结果。

    我在Josh smith的样本项目中测试过但和我的计划一样如果你想展示。从下载josh smith代码 here 在主窗口viewmodel.cs上更改以下代码

    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);
            }
    

    void ShowAllCustomers()
            {
                AllCustomersViewModel workspace = null;
    
                workspace = new AllCustomersViewModel(_customerRepository);
                this.Workspaces.Add(workspace);            
    
                this.SetActiveWorkspace(workspace);
            }
    

    然后运行代码并打开2个或更多 All Customer view 以及更改列表视图列顺序全部打开 all customer view 显示相同的结果

    如何解决这个问题

    2 回复  |  直到 14 年前
        1
  •  3
  •   Cheval    14 年前

    如果我能引用辛奇的创造者萨查·巴伯的话 http://www.codeproject.com/KB/WPF/CinchV2_3.aspx 请看“工作区:特别注意事项”一节,你可能也有同样的问题,但我也在学习,所以我可能是错的。

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

    你觉得这样不好吗不,再考虑一下(虽然这只是使用数据模板时的一个问题,但是直接的tabitem/view组合是可以的)。因此,我们有几个视图使用MeffedMVVM在TabControl中创建ViewModel然后我们更改选项卡,并猜测视图会被破坏,当我们返回到上一个选项卡项时,当我们使用View 1st和MeffedMVVM时,会为视图创建一个新的ViewModel。”

        2
  •  1
  •   Insider    14 年前

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