我的尝试(如下)失败了:
<Canvas x:Key="锁定" ... /> <Canvas x:Key="解锁" ... /> <Style x:Key="LockButtonStyle" TargetType="{x:Type Button}"> <样式.触发器> <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> </样式> ... <Button Content="{StaticResource Lock}" />
我试图让按钮在 ViewModel 上的 IsReadOnly 属性发生更改时更改(它会触发 INotifyPropertyChanged.PropertyChanged,并将“IsReadOnly”作为 PropertyName)。我错过了什么?
.NET 3.5
回答(至少对我来说 - 不支持一般情况):
我刚刚为布尔属性绑定编写了一个快速转换器。
[值转换(类型(布尔),类型(对象))] 公共类 BooleanValueConverter : IValueConverter { 公共对象 FalseValue { 获取;放; } 公共对象 TrueValue { 获取;放; } #region IValueConverter 成员 公共对象转换(对象值,类型目标类型, 对象参数,CultureInfo 文化) { 返回(布尔)值?this.TrueValue : this.FalseValue; } 公共对象ConvertBack(对象值,类型targetType, 对象参数,CultureInfo 文化) { 返回 object.Equals(this.TrueValue, value) ?真假; } #endregion } ... <local:BooleanValueConverter x:Key="LockOrUnlock" TrueValue="{静态资源解锁}" FalseValue="{静态资源锁}" /> ... <Button Content="{绑定路径=IsReadOnly, 转换器={StaticResource LockOrUnlock}}" />