2012-05-15 156 views
15

我有一个绑定到ObservableCollection的ListView。数据从互联网加载,然后添加到收藏。下载需要几秒钟,我想指示用户数据正在加载。WPF - 将UserControl的可见性绑定到属性

我创建了一个表示活动的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并将其设置为可见/折叠相应。

谢谢!

回答

28

我会推荐使用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> 
+0

感谢,正是我一直在寻找!此外,UserControl是否从Grid继承DataContext?是否有可能在UserControl本身上创建绑定? – Martin

+1

是的,UserControl与Grid有相同的DataContext。因此,您可以将可见性绑定到UserControl上,而不会出现问题。 – davisoa

+0

小提示:将BooleanToVisibiltyConverter更改为BooleanToVisibilityConverter(添加缺少的“i”),它看起来像这样: Kaitnieks

0

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

如果要反转的转换器(例如:隐藏在你的属性为true的元素),这个答案有IValueConverter定制的实现,支持通过XAML

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