私の試み(以下)は失敗します:
<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 Binding="{Binding Path=IsReadOnly}" Value="False"> <DataTrigger.Setters> <Setter Property="Content" Value="{StaticResource Unlock}" /> </DataTrigger.Setters> </データトリガー> </Style.Triggers> </スタイル> ... <Button Content="{StaticResource Lock}" />
ViewModelのIsReadOnlyプロパティが変更されたときにボタンを変更しようとしています(PropertyNameとして「IsReadOnly」でINotifyPropertyChanged.PropertyChangedを起動します)。私は何が欠けていますか?
.NET 3.5
回答(少なくとも私にとっては、一般的なケースをサポートしていません):
ブール値プロパティ バインド用のクイック コンバーターを作成しました。
[ValueConversion(typeof(bool), typeof(object))] public class BooleanValueConverter : IValueConverter { パブリック オブジェクト FalseValue { get; 設定; } パブリック オブジェクト TrueValue { get; 設定; } #region IValueConverter メンバー public object Convert(オブジェクト値、タイプ targetType、 オブジェクト パラメータ、CultureInfo カルチャ) { 戻り値 (ブール値) ? this.TrueValue : this.FalseValue; } public object ConvertBack(オブジェクト値、タイプ targetType、 オブジェクト パラメータ、CultureInfo カルチャ) { return object.Equals(this.TrueValue, value) ? 真/偽; } #endregion } ... <local:BooleanValueConverter x:Key="LockOrUnlock" TrueValue="{StaticResource Unlock}" FalseValue="{StaticResource Lock}" /> ... <Button Content="{Binding Path=IsReadOnly, Converter={StaticResource LockOrUnlock}}" />