Ma tentative (ci-dessous) échoue:WPF modifier le contenu de bouton sur l'événement ViewModel.PropertyChanged
<Canvas x:Key="Lock" ... /> <Canvas x:Key="Unlock" ... /> <Style x:Key="LockButtonStyle" TargetType="{x:Type Button}"> <Style.Triggers> <DataTrigger Binding="{Binding Path=IsReadOnly}" Value="True"> <DataTrigger.Setters> <Setter Property="Content" Value="{StaticResource Lock}" /> </DataTrigger.Setters> </DataTrigger> <DataTrigger Binding="{Binding Path=IsReadOnly}" Value="False"> <DataTrigger.Setters> <Setter Property="Content" Value="{StaticResource Unlock}" /> </DataTrigger.Setters> </DataTrigger> </Style.Triggers> </Style> ... <Button Content="{StaticResource Lock}" />
J'essaie d'obtenir le bouton pour changer lorsque la propriété IsReadOnly sur les changements de ViewModel (il se déclenche INotifyPropertyChanged.PropertyChanged avec "IsReadOnly" en tant que PropertyName). Qu'est-ce que je rate?
.NET 3.5
ANSWER (au moins pour moi - ne supporte pas le cas général):
Je viens d'écrire un convertisseur rapide pour la liaison propriété booléenne.
[ValueConversion(typeof(bool), typeof(object))] public class BooleanValueConverter : IValueConverter { public object FalseValue { get; set; } public object TrueValue { get; set; } #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (bool)value ? this.TrueValue : this.FalseValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return object.Equals(this.TrueValue, value) ? true : false; } #endregion } ... <local:BooleanValueConverter x:Key="LockOrUnlock" TrueValue="{StaticResource Unlock}" FalseValue="{StaticResource Lock}" /> ... <Button Content="{Binding Path=IsReadOnly, Converter={StaticResource LockOrUnlock}}" />
Que faire vous voulez dire par "ça devrait marcher"? Définir le contenu est ce que j'essaie d'accomplir. Si vous ne pouvez pas le changer avec un déclencheur, alors je ne vois pas comment cela est possible du tout. –
Votre déclencheur définit le contenu dans tous les cas, en fonction de la valeur de la propriété IsReadOnly. Vous n'avez pas besoin de définir le contenu de votre bouton. Donnez-lui le style LockButtonStyle et voyez ce qu'il se passe. –