我有一个显示视频的视图。视频可以记录(在设备上)或下载(随后对其进行一些验证操作)。我们有一个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>
答案 0 :(得分: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
,决定哪个ViewModel类型应该使用哪个模板(Template1或2)。
最后但并非最不重要的是,在您的视图中,您需要在相关位置使用<ContentPresenter>
,并且可以将ContentPresenter
s DataTemplateSelector
配置为您的特定选择器。
这个(相当古老的)Tutorial将帮助您理解它,您需要改变的是您不使用项目列表而是一个项目,这就是您想要使用{{1 }} 为了这。官方MSDN resource也应该有所帮助。