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>