同一视图模型的多个几乎相同的视图

时间:2014-02-13 16:17:36

标签: c# wpf xaml mvvm

我有一个暴露属性的视图模型,我最初使用该视图模型有一个视图。该视图中包含多个资源,其次是:

<!-- View1.xaml -->
<!-- several resources specific to View1 -->
<StackPanel Orientation="Horizontal">
   <!-- left side -->
   <!-- right side -->
</StackPanel>

单独留下这一点,我需要提供相同的信息,只显示左侧,并且当将鼠标悬停在最初左侧时,右侧显示为工具提示:

<!-- View2.xaml -->
<!-- same View1 resources -->
<!-- original left side -->
    <!-- original left side.ToolTip -->
        <!-- original right side -->
    <!--/original left side.ToolTip -->
<!--/code for original left side -->

作为第一次尝试,我通过将原始视图复制到新视图并进行更改来完成此操作。

使用它的视图最初使用了这个,但仍然如此:

<DataTemplate ...>
   <View1 />
</DataTemplate>

我现在有了一个新的单独视图,其中包含:

<DataTemplate ...>
   <View2 />
</DataTemplate>

我不想分别复制/粘贴/维护View1和View2资源,因为它们是相同的。我希望他们在一个地方,所以在这种情况下最好的做法是什么?

我应该将资源移动到单独的文件并在View1.xaml和View2.xaml中引用它们,还是应该修改View1.xaml以支持备用工具提示,并以某种方式从这两个地方调用它:

<!-- file1.xaml -->
<DataTemplate ...>
   <View1 />
</DataTemplate>

<!-- file2.xaml -->
<DataTemplate ...>
   <View1 Layout="Brief" />
</DataTemplate>

如果是后者,我该如何支持Layout中的新View1属性?

请注意,我不需要在运行时在这些视图之间进行更改,因此我认为我不需要DataTemplateSelector

感谢。

1 个答案:

答案 0 :(得分:-1)

听起来您只需将公共资源放入App.xaml文件的Application.Resources部分即可。这里定义的所有资源都可以在应用程序范围内使用,因此您的所有视图都可以引用有关完整故事,请参阅MSDN上的How to: Use Application Resources页面,但是从该页面开始:

<Application.Resources>
  <Style TargetType="Button" x:Key="GelButton" >
    <Setter Property="Margin" Value="1,2,1,2"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Setter Property="Template">
      <Setter.Value>
...
      </Setter.Value>
    </Setter>
  </Style>
</Application.Resources>

在此示例中,应用程序中每个GelButton StyleButton中定义的每个Window都可以使用UserControl