2012-05-15 199 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> 
相關問題