0

我有一个显示视频的视图。可以录制(在设备上)或下载视频(随后对其进行一些验证操作)。我们有一个 ViewModel 来表示每个状态,尽管它们共享一个公共 ViewModel 基类。

我们对两者重复使用相同的视图,因为它们 99% 相同。下载的 ViewModel 有几个与验证相关的额外属性(无论是被接受还是被拒绝)。鉴于我们使用相同的视图,这会为录制的视频生成绑定错误。

我该如何解决这个问题?我会认为如果这些视觉元素是不可见的,它们不会产生绑定错误(除非它在保存的记录中,否则它们是不可见的)

<StackPanel x:Name="ValidationHistory" Visibility="{Binding IsSavedRecording, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Visible}">
    <StackPanel Visibility="{Binding HasAcceptedValidationSessions, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Visible}">
        <TextBlock Text="{Binding NumberOfAcceptedValidationSessions, FallbackValue=0}"  />
    </StackPanel>
</StackPanel>
4

1 回答 1

0

您可能想要使用的是 DataTemplates。

很粗略的描述

您为视图的相关部分创建两个模板,例如,包含StackPanel或不包含。

<DataTemplate x:Key="Template1" DataType="{x:Type m:ValidationHistoryViewModel}">
    <StackPanel x:Name="ValidationHistory">...*your critical binding*...</StackPanel>
</DataTemplate>

<DataTemplate x:Key="Template2" DataType="{x:Type m:OtherViewModel}">
</DataTemplate>

然后你实现一个DataTemplateSelector决定哪个模板(Template1 或 2)应该由哪个 ViewModel 类型使用。

最后但并非最不重要的一点是,在您的视图中,您需要<ContentPresenter>在相关点使用 a,并且您可以将ContentPresenters配置DataTemplateSelector为您的特定选择器。

这个(相当老的)教程将帮助您理解它,您需要更改的是您不使用项目列表而是一个,这就是您要为此使用 aContentPresenter的原因。官方的MSDN 资源也应该有帮助。

于 2013-10-23T13:20:44.077 回答