C# WPF样式未按预期工作
我已将以下样式应用于按钮(默认情况下启用):C# WPF样式未按预期工作,c#,wpf,datatrigger,C#,Wpf,Datatrigger,我已将以下样式应用于按钮(默认情况下启用): 当FoxProTableIsDirty为False时,此选项用于禁用按钮 我最初将此连接如下(默认情况下禁用): 但是当FoxProTableIsDirty为False时,第二种方法无法禁用按钮 在我编写样式时,第二种样式似乎更有意义,因为默认情况下,按钮应该被禁用,直到对关联的表进行更改并且需要保存更改 有人能解释为什么第二个不能像预期的那样工作吗 编辑 以下是使用此样式的按钮的代码: <Button Name="CancelFoxp
当FoxProTableIsDirty为False时,此选项用于禁用按钮
我最初将此连接如下(默认情况下禁用):
但是当FoxProTableIsDirty为False时,第二种方法无法禁用按钮
在我编写样式时,第二种样式似乎更有意义,因为默认情况下,按钮应该被禁用,直到对关联的表进行更改并且需要保存更改
有人能解释为什么第二个不能像预期的那样工作吗
编辑
以下是使用此样式的按钮的代码:
<Button Name="CancelFoxproChanges"
Content="Cancel"
Style="{StaticResource DisableFoxProCancelButton}"
DockPanel.Dock="Right"
HorizontalAlignment="Right">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding}"
MethodName="FoxProCancelButtonClicked" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
检查
按钮
元素中是否设置了IsEnabled
如果将其设置为触发器不能覆盖本地或内联值,则删除
换句话说,您可以直接将FoxProTableIsDirty绑定到按钮的IsEnabled,例如
<Button IsEnabled="{Binding FoxProTableIsDirty}" />
或者通过样式设置器
<Setter Property="IsEnabled" Value="{Binding FoxProTableIsDirty}" />
因此,只要正在解决
FoxProTableIsDirty
并通知更改,这将根据需要启用/禁用按钮WPF乍一看是正确的。因此,问题可能在于FoxProTableIsDirty属性本身的实现,而不是WPF。FoxProTableIsDirty是一个依赖属性,还是激发INotifyPropertyChanged事件?我假设它是一个布尔值而不是字符串。FoxProTableIsDirty是VM上的一个布尔属性(启动时设置为False),它确实正确地触发了INotifyPropertyChanged事件。我发现问题来自BasedOn样式。显然,MultiDataTrigger不会被覆盖,而是累积的,并且BasedOn样式具有一个MultiDataTrigger,该MultiDataTrigger将按钮设置为enabled。IsEnabled不会在按钮标记中被覆盖(请参见编辑)。我同意按照建议的方式移动它会更好,但我想了解为什么它不能像我最初设置的那样工作。@BrianKE,您的代码看起来是正确的。为了进一步分析,您是否可以发布一个可以重现您所面临问题的应用程序工作示例?
<Button IsEnabled="{Binding FoxProTableIsDirty}" />
<Setter Property="IsEnabled" Value="{Binding FoxProTableIsDirty}" />