假设:
<StackPanel>
<View:ArcController x:Name="control1" Visibility="{Binding Path=CanShowDateControl, Converter={StaticResource bool2VisibilityConverter}}" />
<my1:DateLabelView x:Name="control2" DataContext="{Binding Path=DateLabelViewModel}" Visibility="{Binding ElementName=ctrlTableToolbar, Path=DataContext.IsDateReadOnly, Converter={StaticResource bool2VisibilityConverter}}" />
</StackPanel>
我在stackpanel中有两个控件(control1和control2),而且我一次只想显示其中一个控件。 如代码所示,控件的可见性由“IsDateReadOnly”和“CanShowDateControl”驱动。 并且,根据我的viewmodel逻辑... CanShowDateControl =!IsReadOnly。
所以,有一段时间我只会展示两个控制中的一个。
问题:我的问题是,虽然我一次只显示一个控件,但我的xaml正在创建两个控件的实例。是否可以创建仅显示我正在显示的控件的实例?
给出:
1)我想显示/隐藏使用绑定,因此逻辑位于我的viewmodel中。 2)我可以将这两个控件保存在一个包装器控件中。因为我在不同的地方使用它。
感谢您的关注。
答案 0 :(得分:3)
使用ContentControl
和ContentTemplateSelector
两个DataTemplate
。一个用于ReadOnly
,另一个用于Not ReadOnly
。
在选择器中,根据属性返回适当的DataTemplate
。
你可以采用其他方式创建一个Custom Control
,它有两个(或多个,如果超过两个)属性来存储两个控件。根据条件,它应该将其中一个添加到Visual Tree
,这将阻止另一个加载。