【问题标题】:Conditional loading of WPF controlsWPF 控件的条件加载
【发布时间】:2011-01-12 12:26:47
【问题描述】:

给定:

        <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)我可以将这两个控件保存在一个包装控件中。因为我在不同的地方使用它。

感谢您的关注。

【问题讨论】:

  • 创建两个控件的实例有那么大的问题吗?
  • @ChrisF:因为我创建了这个控件的多个实例,如果我可以让这个控件消耗更少的内存,它将大大优化内存使用。

标签: c# xaml binding


【解决方案1】:

ContentControlContentTemplateSelector 与两个DataTemplates 一起使用。一个用于ReadOnly,另一个用于Not ReadOnly

在选择器中,根据属性,返回适当的DataTemplate

您可以采用的其他方法是创建一个Custom Control,它具有两个(或多个,如果多于两个)属性来存储两个控件。根据一个条件,它应该将其中一个添加到Visual Tree,这将阻止另一个被加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2021-11-25
    • 2023-04-05
    • 2011-08-15
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多