【问题标题】:WPF - Bind UserControl visibility to a propertyWPF - 将 UserControl 可见性绑定到属性
【发布时间】: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。

谢谢!

【问题讨论】:

    标签: c# wpf xaml binding controltemplate


    【解决方案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”),它看起来像这样:
    【解决方案2】:

    使用 .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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 2011-06-22
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多