J'ai un ListView lié à ObservableCollection. Les données sont chargées à partir d'Internet, puis ajoutées à la collection. Le téléchargement prend quelques secondes et je veux indiquer à l'utilisateur que les données sont en cours de chargement.
J'ai créé un UserControl qui indique une activité. Je l'ai placé à l'intérieur de ControlTemplate.
<ControlTemplate x:Key="ListViewControlTemplate1" TargetType="{x:Type ListView}">
<Grid>
<local:ActivityIndicatorControl
HorizontalAlignment="Center"
Height="Auto"
Margin="0"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
Je souhaiterais lier Visibility of ActivityIndicatorControl
à une propriété, disons bool IsLoading
et définissez-la sur Visible/Collapsed en conséquence.
Merci!
Je recommanderais d'utiliser un IValueConverter
pour accepter votre valeur booléenne et renvoyer un membre de l'énumération Visibility.
Voici un bon exemple: http://jeffhandley.com/archive/2008/10/27/binding-converters---visibilityconverter.aspx
Le XAML ressemblerait à ceci:
Tout d’abord, vous définissez une ressource pour le convertisseur (placez-la dans un dictionnaire de ressources):
<local:BooleanToVisibilityConverter x:Key="myBoolToVisibilityConverter" />
Et puis changez votre modèle comme ceci:
<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 3 a un BooleanToVisibilityConverter intégré .
(Remarque: Peut ne pas être disponible sur toutes les plateformes, ex: mobile)
Tout d'abord l'ajouter à vos ressources
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="bool2vis"></BooleanToVisibilityConverter>
</UserControl.Resources>
Ensuite, utilisez-le sur un élément
<Label Visibility="{Binding IsSomeProperty, Converter={StaticResource bool2vis}}" />
Comment puis-je inverser BooleanToVisibilityConverter?
Si vous souhaitez inverser le convertisseur (ex: masquer l'élément lorsque votre propriété est true), cette réponse a une implémentation personnalisée de IValueConverter
qui la prend en charge via XAML.
<Application.Resources>
<app:BooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
True="Collapsed"
False="Visible" />
</Application.Resources>