WPF - 将 UserControl 可见性绑定到属性
Posted
技术标签:
【中文标题】WPF - 将 UserControl 可见性绑定到属性【英文标题】:WPF - Bind UserControl visibility to a property 【发布时间】:2012-05-23 08:48:23 【问题描述】:我有一个绑定到 ObservableCollection 的 ListView。数据从 Internet 加载,然后添加到集合中。下载需要几秒钟,我想告诉用户数据正在加载。
我创建了一个指示活动的用户控件。我把它放在 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。
谢谢!
【问题讨论】:
【参考方案1】:我建议使用IValueConverter
来接受您的布尔值,并返回可见性枚举的成员。
这是一个很好的例子: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>
【讨论】:
谢谢,正是我想要的!另外,UserControl 是否从 Grid 继承 DataContext?是否可以在 UserControl 本身上创建绑定? 是的,UserControl 将具有与 Grid 相同的 DataContext。因此,您可以毫无问题地将可见性绑定放在 UserControl 上。 一个小提示:将 BooleanToVisibiltyConverter 更改为 BooleanToVisibilityConverter(添加缺少的“i”),它看起来像这样:使用 .NET 的内置转换器
.NET 3 有一个内置的BooleanToVisibilityConverter。
(注意:可能并非在所有平台上都可用,例如:移动)
首先将其添加到您的资源中
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="bool2vis"></BooleanToVisibilityConverter>
</UserControl.Resources>
然后在元素上使用它
<Label Visibility="Binding IsSomeProperty, Converter=StaticResource bool2vis" />
反相
How do I invert BooleanToVisibilityConverter?
如果你想反转转换器(例如:当你的属性为真时隐藏元素),这个答案有一个 IValueConverter
的自定义实现,通过 XAML 支持它
<Application.Resources>
<app:BooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
True="Collapsed"
False="Visible" />
</Application.Resources>
【讨论】:
以上是关于WPF - 将 UserControl 可见性绑定到属性的主要内容,如果未能解决你的问题,请参考以下文章