不要每次都使用DataTemplate / DataType创建新视图

Con*_*cer 5 c# wpf datatemplate

我有这样的事情:

<Window>
    <Window.Resources>
       <DataTemplate DataType="{x:Type local:VM1}">
          <!-- View 1 Here -->
       </DataTemplate>

       <DataTemplate DataType="{x:Type local:VM2}">
          <!-- View 2 here -->
       </DataTemplate>
    <Window.Resources>

    <ContentPresenter Content="{Binding}"/>
</Window>
Run Code Online (Sandbox Code Playgroud)

当我绑定不同的视图模型时,这将自动交换视图,这非常方便。

但是,我有一个带有tabcontrol和许多子视图的视图。每个子视图都有几个可视部分,这些可视部分由自定义xml文件配置(复杂的业务案例)。每次创建此视图时,都会解析xml文件,这会导致较小的延迟(1-2秒)。烦人并使UI呆滞足以延迟。

有没有一种方法可以使用DataTemplate模式而无需每次绑定视图模型时都销毁和重新创建视图?如果可能,我宁愿不更改视图模型。

rob*_*tos 2

对于这种情况,最简单的解决方案是让两个视图始终存在并更改其中一个可见。您可以使用转换器根据数据上下文的类型更改可见性

<View1 Visibility="{Binding Converter={StaticResource TypeToVisibilityConverter, ConverterParameter=VM1}" />
<View2 Visibility="{Binding Converter={StaticResource TypeToVisibilityConverter, ConverterParameter=VM2}" />
Run Code Online (Sandbox Code Playgroud)

转换器将检查类型是否与参数匹配,以返回 Visible,否则返回 Collapsed。