我有一个绑定到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。
谢谢!
答案 0 :(得分:28)
我建议使用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>
答案 1 :(得分:0)
.NET 3内置BooleanToVisibilityConverter。
(注意:可能并非在所有平台上都可用,例如:移动设备)
首先将其添加到您的资源
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="bool2vis"></BooleanToVisibilityConverter>
</UserControl.Resources>
然后在元素
上使用它<Label Visibility="{Binding IsSomeProperty, Converter={StaticResource bool2vis}}" />
How do I invert BooleanToVisibilityConverter?
如果要反转转换器(例如:当属性为true时隐藏元素),此答案具有IValueConverter
的自定义实现,通过XAML支持
<Application.Resources>
<app:BooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
True="Collapsed"
False="Visible" />
</Application.Resources>