WPF - 将用户控件可见性绑定到属性

本文关键字:绑定 属性 可见性 控件 用户 WPF | 更新日期: 2023-09-27 18:34:27

我有一个绑定到 ObservableCollection 的 ListView。数据从互联网加载,然后添加到集合中。下载需要几秒钟,我想指示用户数据正在加载。

我创建了一个指示活动的用户控件。我把它放在控件模板中。

<ControlTemplate x:Key="ListViewControlTemplate1" TargetType="{x:Type ListView}">
    <Grid>
        <local:ActivityIndicatorControl 
            HorizontalAlignment="Center" 
            Height="Auto" 
            Margin="0" 
            VerticalAlignment="Center"/>
    </Grid>
</ControlTemplate>

我想将ActivityIndicatorControl的可见性绑定到一个属性,比如说bool IsLoading,并相应地将其设置为可见/折叠。

谢谢!

WPF - 将用户控件可见性绑定到属性

我建议使用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>

使用 .NET的内置转换器

.NET 3 有一个内置的 BooleanToVisibilityConverter。

(注意:可能并非在所有平台上都可用,例如:移动设备(

首先将其添加到您的资源中

<UserControl.Resources>
    <BooleanToVisibilityConverter x:Key="bool2vis"></BooleanToVisibilityConverter>
</UserControl.Resources>

然后在元素上使用它

<Label Visibility="{Binding IsSomeProperty, Converter={StaticResource bool2vis}}" />

反转

如何反转布尔值到可见性转换器?

如果要反转转换器(例如:在属性为 true 时隐藏元素(,此答案具有通过 XAML 支持的自定义IValueConverter实现

<Application.Resources>
    <app:BooleanToVisibilityConverter 
        x:Key="BooleanToVisibilityConverter" 
        True="Collapsed" 
        False="Visible" />
</Application.Resources>