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 и установите его в Visible / Collapsed соответственно.

Спасибо!

Ответы на вопрос(2)

Решение Вопроса

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

Вот хороший пример:http: //jeffhandley.com/archive/2008/10/27/binding-converters---visibilityconverter.asp

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>
 davisoa15 мая 2012 г., 21:42
Да, UserControl будет иметь тот же DataContext, что и Grid. Из-за этого вы можете без проблем поместить привязку видимости в UserControl.
 Kaitnieks05 сент. 2016 г., 21:53
Небольшое примечание: замените BooleanToVisibiltyConverter на BooleanToVisibilityConverter (добавьте пропущенное «i»), и оно будет выглядеть так: <BooleanToVisibilityConverter x: Key = «myBoolToVisibilityConverter» />
 davisoa06 сент. 2016 г., 20:06
Спасибо, что заметили! Я обновил ответ.
 Martin15 мая 2012 г., 21:40
Спасибо, именно то, что я искал! Кроме того, UserControl наследует DataContext от Grid? Можно ли создать привязку на самом UserContro
Используйте .NET встроенный конвертер

. BooleanToVisibilityConverter.

(Примечание: может быть доступно не на всех платформах, например, для мобильных устройств)

Сначала добавьте его в свои ресурсы

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

Затем используйте его на элементе

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

Как мне инвертировать BooleanToVisibilityConverter?

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

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

Ваш ответ на вопрос