簡體   English   中英

WPF - 將 UserControl 可見性綁定到屬性

[英]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 的內置轉換器

.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM