WPF MVVM hiding button using BooleanToVisibilityConverter
dans mon application WPF j'essaie de changer la visibilité d'un bouton en fonction des options choisies par un utilisateur. En charge, je veux que l'un des boutons ne soit pas visible. J'utilise le convertisseur de valeur booleantovisibilityconverter. Cependant il ne fonctionne pas, le bouton apparaît au moment du chargement. J'ai changé la propriété à la fois vrai et faux, ne fait aucune différence. Voici mon code, je ne vois pas ce que je rate?
la propriété à mon avis Modèle
bool ButtCancel
{
get { return _buttCancel; }
set
{
_buttCancel = value;
OnPropertyChanged("ButtCancel");
}
}
Dans mon application.xaml
<Application.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVis"/>
dans mon MainWindow.xaml
<Button Grid.Column="2"
Command="{Binding CommandButtProgressCancel}"
Content="Cancel"
Visibility="{Binding ButtCancel, Converter={StaticResource BoolToVis}}"
IsEnabled="{Binding ButtCancelEnabled}"
Height="50" Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center" Margin="0,0,50,20"/>
2 réponses
pour commencer mate, si vous utilisez une commande, alors vous n'avez pas besoin de lier IsEnabled, l'implémentation de la commande devrait décider cela.
Deuxièmement, la liaison D'un modèle de vue à une vue a tendance à se produire un peu plus tard, il est donc préférable de définir également une valeur par défaut pour la liaison, comme so
Visibility="{Binding ButtCancel, Converter={StaticResource BoolToVis}, FallbackValue=Hidden}"
Troisièmement, comme Mike l'a souligné, assurez-vous que votre propriété est publique, puisque le modèle de vue et la vue sont deux classes distinctes.
au Lieu d'utiliser un convertisseur, vous pouvez simplement utiliser un DataTrigger
.
<Button Grid.Column="2" Command="{Binding CommandButtProgressCancel}" Content="Cancel"
Visibility="{Binding ButtCancel, Converter={StaticResource BoolToVis}}"
IsEnabled="{Binding ButtCancelEnabled}" Height="50" Width="120" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,50,20">
<Button.Style>
<Style TargetType={X:Type Button}>
<!-- This would be the default visibility -->
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding = "{Binding ButtCancel, UpdateSourceTrigger=PropertyChanged}" Value = "True">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
mettez à jour les propriétés de votre ViewModel vers public
public bool ButtCancel
{
get { return _buttCancel; }
set
{
_buttCancel = value;
OnPropertyChanged("ButtCancel");
}
}
Et assurez-vous que le DataContext de votre MainWindow
est défini à ViewModel
.