WPF-привязка видимости UserControl к свойству

у меня есть ListView, привязанный к ObservableCollection. Данные загружаются из интернета, а затем добавляются в коллекцию. Загрузка занимает несколько секунд, и я хочу указать пользователю, что данные загружаются.

Я создал 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 и установите его в видимый / свернутый соответственно.

спасибо!

2 ответов


Я бы рекомендовал использовать IValueConverter чтобы принять логическое значение и вернуть член перечисления видимости.

вот хороший пример одного: 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?

если вы хотите поменять конвертер (например: скрыть элемент, когда ваше свойство true), этот ответ имеет пользовательскую реализацию IValueConverter это поддерживает это через XAML

<Application.Resources>
    <app:BooleanToVisibilityConverter 
        x:Key="BooleanToVisibilityConverter" 
        True="Collapsed" 
        False="Visible" />
</Application.Resources>