[英]WPF - Bind UserControl visibility to a property
我有一个绑定到 ObservableCollection 的 ListView。 数据从 Internet 加载,然后添加到集合中。 下载需要几秒钟,我想告诉用户数据正在加载。
我创建了一个指示活动的 UserControl。 我把它放在 ControlTemplate 里面。
<ControlTemplate x:Key="ListViewControlTemplate1" TargetType="{x:Type ListView}">
<Grid>
<local:ActivityIndicatorControl
HorizontalAlignment="Center"
Height="Auto"
Margin="0"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
我想将ActivityIndicatorControl
可见性绑定到一个属性,假设bool IsLoading
并将其设置为 Visible/Collapsed 相应。
谢谢!
我建议使用IValueConverter
来接受您的布尔值,并返回 Visibility 枚举的成员。
这是一个很好的例子: http : //jeffhandley.com/archive/2008/10/27/binding-converters---visibilityconverter.aspx
XAML 看起来像这样:
首先为转换器定义一个资源(将其放入资源字典中):
<local:BooleanToVisibilityConverter x:Key="myBoolToVisibilityConverter" />
然后像这样更改您的模板:
<ControlTemplate x:Key="ListViewControlTemplate1" TargetType="{x:Type ListView}">
<Grid Visibility="{Binding IsLoading, Converter={StaticResource myBoolToVisibilityConverter}}">
<local:ActivityIndicatorControl
HorizontalAlignment="Center"
Height="Auto"
Margin="0"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
.NET 3 有一个内置的BooleanToVisibilityConverter 。
(注意:可能并非在所有平台上都可用,例如:移动)
首先将其添加到您的资源中
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="bool2vis"></BooleanToVisibilityConverter>
</UserControl.Resources>
然后在元素上使用它
<Label Visibility="{Binding IsSomeProperty, Converter={StaticResource bool2vis}}" />
如何反转 BooleanToVisibilityConverter?
如果你想反转转换器(例如:当你的属性为真时隐藏元素),这个答案有一个IValueConverter
的自定义实现,它通过 XAML 支持它
<Application.Resources>
<app:BooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
True="Collapsed"
False="Visible" />
</Application.Resources>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.