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

17

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

我创建了一个指示活动的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,并根据该属性设置其可见/隐藏。

谢谢!

2个回答

31

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

谢谢,正是我正在寻找的!此外,UserControl是否从Grid继承DataContext?是否可能在UserControl本身上创建绑定? - Martin
1
是的,UserControl将与Grid具有相同的DataContext。因此,您可以毫无问题地在UserControl上放置可见性绑定。 - davisoa
一个小提示:将BooleanToVisibiltyConverter更改为BooleanToVisibilityConverter(添加缺少的“i”),它应该是这样的:<BooleanToVisibilityConverter x:Key="myBoolToVisibilityConverter" /> - Kaitnieks

2

使用.NET内置转换器

.NET 3内置了BooleanToVisibilityConverter

(注意:可能不适用于所有平台,例如:移动设备)

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

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

然后将其应用于一个元素上

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

反转

如何反转BooleanToVisibilityConverter?

如果您想要反转转换器(例如:当属性为true时隐藏元素),此答案提供了一个支持通过XAML实现该功能的自定义IValueConverter实现。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接