C# WPF-将UserControl可见性绑定到属性

C# WPF-将UserControl可见性绑定到属性,c#,wpf,xaml,binding,controltemplate,C#,Wpf,Xaml,Binding,Controltemplate,我有一个绑定到ObservableCollection的ListView。数据从internet加载,然后添加到集合中。下载需要几秒钟,我想告诉用户数据正在加载 我创建了一个指示活动的UserControl。我把它放在ControlTemplate里面 <ControlTemplate x:Key="ListViewControlTemplate1" TargetType="{x:Type ListView}"> <Grid> <local:

我有一个绑定到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
,并相应地将其设置为可见/折叠

谢谢

我建议使用接受布尔值并返回可见性枚举的成员

下面是一个很好的例子:

XAML将如下所示:

<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>
首先定义转换器的资源(将其放入资源字典中):


然后按如下方式更改模板:

<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的内置转换器 .NET3具有内置的

(注:并非所有平台都提供,例如:移动平台)

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

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

谢谢,正是我想要的!此外,UserControl是否从网格继承DataContext?是否可以在UserControl本身上创建绑定?是的,UserControl将具有与网格相同的DataContext。因此,您可以毫无问题地将可见性绑定放在UserControl上。请注意:将BooleanToVisibilityConverter更改为BooleanToVisibilityConverter(添加缺少的“i”),如下所示:
<Label Visibility="{Binding IsSomeProperty, Converter={StaticResource bool2vis}}" />
<Application.Resources>
    <app:BooleanToVisibilityConverter 
        x:Key="BooleanToVisibilityConverter" 
        True="Collapsed" 
        False="Visible" />
</Application.Resources>