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.

Спасибо!

Ответы

Ответ 1

Я бы рекомендовал использовать 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>