2011-01-12 25 views
3

考虑:WPF的条件装载控制

 <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内的两个控制(控制1和控制2),并在同一时间,我想只显示控件之一。 如代码所示,控件的可见性由“IsDateReadOnly”和“CanShowDateControl”驱动。 而且,根据我的viewmodel逻辑... CanShowDateControl =!IsReadOnly。

所以,有一次我只会显示两个控件之一。

问题:我的问题是,虽然我一次只显示一个控件,但我的xaml正在创建两个控件的实例。是否有可能创建我只显示的控件的实例?

把那:

1)我想用结合显示/隐藏,这样的逻辑就在于我的视图模型。 2)我可以将这两个控件放在一个包装控件中。因为我在不同的地方使用它。

感谢您的关注。

+0

正在创建一个两个控件的实例,这是一个很大的问题? – ChrisF 2011-01-12 12:29:13

回答

3

使用ContentControlContentTemplateSelector与两个DataTemplate s。一个用于ReadOnly和其他用于Not ReadOnly

在选择器中,根据属性返回相应的DataTemplate

你可以使用的其他方法是创建一个Custom Control,它有两个(或多于两个)属性来存储两个控件。基于一个条件,它应该添加其中的一个到Visual Tree,这将防止另一个被加载。