2012-05-15 28 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列挙体のメンバーを返すことをお勧めします。ここで

は1の良い例です: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

おかげで、サポートIValueConverterのカスタム実装を持っています!また、UserControlはGridからDataContextを継承しますか? UserControl自体にバインディングを作成することは可能でしょうか? – Martin

+1

はい、UserControlはGridと同じDataContextを持ちます。このため、可視性バインディングを問題なくUserControlに配置できます。 – davisoa

+0

小さい注記:BooleanToVisibiltyConverterをBooleanToVisibilityConverter(不足する「i」を追加)に変更すると、次のようになります。 Kaitnieks

0

.NETの組み込みコンバータを使用

.NET 3にはBooleanToVisibilityConverterが組み込まれています。

(注:携帯電話:すべてのプラットフォーム、EXで使用できない場合があります)まず

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

次に、あなたのリソースに追加要素

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

反転上でそれを使用

How do I invert BooleanToVisibilityConverter?

あなたは、コンバータを反転したい場合(例:あなたのプロパティがtrueのとき、要素を非表示)、この答えは私が探していたまさにそのXAML

経由
<Application.Resources> 
    <app:BooleanToVisibilityConverter 
     x:Key="BooleanToVisibilityConverter" 
     True="Collapsed" 
     False="Visible" /> 
</Application.Resources> 
関連する問題