c# - WPF 控件的条件加载

标签 c# xaml binding

给定:

        <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”驱动。 而且,根据我的 View 模型逻辑... CanShowDateControl = !IsReadOnly。

因此,我一次只会显示两个控件之一。

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

给那个:

1) 我想使用绑定(bind)来显示/隐藏,因此该逻辑位于我的 View 模型中。 2) 我可以将这两个控件放在一个包装器控件中。因为我在不同的地方使用它。

感谢您的关注。

最佳答案

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

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

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

关于c# - WPF 控件的条件加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668771/

相关文章:

c# - 如何使用 C# 在 WinForm 中手动绑定(bind)到低功耗蓝牙设备?

c# - 使用正则表达式从 AssemblyInfo.cs 文件中检索程序集版本

c# - TabItem 绑定(bind) WPF

java - 生成 Java 绑定(bind)到基于 Qt 的库

c# - DataTable 到 Dictionary<String,StringBuilder> 的转换

javascript - 在 Response.Flush 之前关闭模态 - C#

wpf - 如何在 XAML 中添加 ListView CornerRadius

c# - 如何使用VisualState AdaptiveTrigger改变ListView Item FontSize

xaml - 如何在 Xamarin 项目中的 "Resources"中插入图像的正确方法

wpf - 如何使用 Bindings 获取 DateTime 值? (WPF-MVVM)