C#-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>         

我在堆栈面板中有两个控件(control1和control2),而我一次只想显示其中一个控件.
如代码中所示,控件的可见性由“ IsDateReadOnly”和“ CanShowDateControl”驱动.
而且,按照我的视图模型逻辑… CanShowDateControl =!IsReadOnly.

因此,一次我将仅显示两个控件之一.

问题:我的问题是,尽管我一次只显示一个控件,但是我的xaml正在创建两个控件的实例.是否可以仅创建我正在显示的控件的实例?

给那个:

1)我想使用绑定显示/隐藏,所以逻辑在于我的视图模型.
2)我可以将这两个控件保留在一个包装控件中.由于我在不同的地方使用它.

谢谢你的关注.

解决方法:

将ContentControl和ContentTemplateSelector与两个DataTemplates一起使用.一个用于只读,另一个用于非只读.

在选择器中,基于属性,返回适当的DataTemplate.

您可以采用的另一种方法是创建一个自定义控件,该控件具有两个(或两个以上,如果有更多属性)属性来存储两个控件.根据条件,应将其中一个添加到可视树,这将阻止另一个加载.

上一篇:CodeGo.net>与用户控件的双向绑定


下一篇:WPF:如何实现通用窗口?