ObservableCollectionにバインドされたListViewがあります。データはインターネットから読み込まれ、コレクションに追加されます。ダウンロードには数秒かかりますが、データを読み込んでいることをユーザーに示したいと思います。
アクティビティを示すUserControlを作成しました。 ControlTemplate内に配置しました。
<ControlTemplate x:Key="ListViewControlTemplate1" TargetType="{x:Type ListView}">
<Grid>
<local:ActivityIndicatorControl
HorizontalAlignment="Center"
Height="Auto"
Margin="0"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
ActivityIndicatorControl
のVisibilityをプロパティにバインドしたいのですが、bool IsLoading
に応じて、Visible/Collapsedに設定します。
ありがとう!
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>
.NET 3には BooleanToVisibilityConverter が組み込まれています。
(注:一部のプラットフォームでは使用できない場合があります。例:モバイル)
まず、リソースに追加します
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="bool2vis"></BooleanToVisibilityConverter>
</UserControl.Resources>
次に、要素で使用します
<Label Visibility="{Binding IsSomeProperty, Converter={StaticResource bool2vis}}" />
BooleanToVisibilityConverterを反転するにはどうすればよいですか?
コンバーターを反転する場合(例:プロパティがtrueの場合は要素を非表示にする)、この回答には、XAMLを介してそれをサポートするIValueConverter
のカスタム実装があります
<Application.Resources>
<app:BooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
True="Collapsed"
False="Visible" />
</Application.Resources>