[英]WPF - Bind UserControl visibility to a property
我有一個綁定到 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
並將其設置為 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?
如果你想反轉轉換器(例如:當你的屬性為真時隱藏元素),這個答案有一個IValueConverter
的自定義實現,它通過 XAML 支持它
<Application.Resources>
<app:BooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
True="Collapsed"
False="Visible" />
</Application.Resources>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.