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

有没有一种MVVM友好的方法来交换视图,而不必启动值转换器?

  •  0
  • devuxer  · 技术社区  · 16 年前

    我认为我所做的是Josh Smith MVVM手册中的内容,但是当视图模型中的数据没有改变时,值转换器的启动似乎有很多问题。

    ContentControl 在XAML中定义如下:

    <ContentControl Grid.Row="0" Content="{Binding CurrentViewModel}" />
    

    内容控制 引用的资源字典如下所示:

    <ResourceDictionary ...>
        <DataTemplate DataType="{x:Type lib_vm:SetupPanelViewModel}">
            <lib_v:SetupPanel />
        </DataTemplate>
        <DataTemplate DataType="{x:Type lib_vm:InstructionsPanelViewModel}">
            <lib_v:InstructionsPanel />
        </DataTemplate>
    </ResourceDictionary>
    

    因此,基本上,这两个数据模板指定了用哪个视图模型显示哪个视图。

    每当 CurrentViewModel 属性,但它似乎也会导致视图上的值转换器启动,即使数据没有更改。这是一个特殊的问题 IMultiValueConverter value 数组设置为 DependencyProperty.UnsetValue

    这让我想知道我是否不应该手动完成所有事情,比如:

    1. 实例化每个视图。
    2. DataContext 将每个视图的属性转换为相应的视图模型。
    3. 把这个给我 内容控制 一个名字并公开。
    4. 处理 PropertyChanged
    5. 在事件处理程序中,手动设置 Content 财产 根据 当前视图模型 (使用 if

    这似乎管用,但也似乎很不雅观。我希望有更好的办法。

    您能告诉我处理视图切换的最佳方法吗?这样值转换器就不会不必要地启动了?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Chris Nicol    16 年前

    您应该看看PRISM或任何其他复合UI框架。棱镜会给你一个很好的机制来处理这类事情。

        2
  •  1
  •   devuxer    16 年前