我试图更新一些视觉属性和按钮上的单击处理程序以响应枚举的值。视觉属性很简单,但是单击处理程序给我带来了麻烦。
枚举有4个值:启动,启动,终止,终止。该按钮将根据当前状态启动或终止进程。这是我拥有的视觉属性:
<Button>
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ProcessState}" Value="{x:Static local:ProcessState.Launching}">
<Setter Property="IsEnabled" Value="false"/>
<Setter Property="Content" Value="Launching..."/>
</DataTrigger>
<DataTrigger Binding="{Binding ProcessState}" Value="{x:Static local:ProcessState.Launched}">
<Setter Property="IsEnabled" Value="true"/>
<Setter Property="Content" Value="Terminate"/>
</DataTrigger>
<DataTrigger Binding="{Binding ProcessState}" Value="{x:Static local:ProcessState.Terminating}">
<Setter Property="IsEnabled" Value="false"/>
<Setter Property="Content" Value="Terminating..."/>
</DataTrigger>
<DataTrigger Binding="{Binding ProcessState}" Value="{x:Static local:ProcessState.Terminated}">
<Setter Property="IsEnabled" Value="true"/>
<Setter Property="Content" Value="Launch"/>
<!-- Doesn't work!
<EventSetter Event="Click" Handler="LaunchSim_Click"/>
-->
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
问题是Style.Triggers
不支持EventSetter
,所以我不能用这种方法更新Button.Click
。现在,我可以使用一个单击处理程序并基于枚举进行分支,但是我想从XAML方面了解什么是可能的。
我还尝试在Button.Resources
中创建4种单独的样式,然后用DataTrigger
换出样式,但是最终您尝试使用一种样式来更改按钮样式,但我也不相信这可行
是否存在合理的方法来从XAML更改Button.Click
以响应变化的数据值?
答案 0 :(得分:2)
是否存在合理的方法来从XAML更改
caindex.html
以响应变化的数据值?
不,没有。使用单击处理程序和基于枚举的分支听起来是个好主意。另外,如果您熟悉MVVM设计模式,则可以绑定到视图模型的命令并在那里处理逻辑。确实可以在Button.Click
中使用Command
来设置Setter
属性,但是请记住XAML是一种 markup 语言,只是因为您可能可以在纯XAML中执行某些操作,但这并不意味着您总是应该这样做。
答案 1 :(得分:1)
您可以代替EventSetter
<Setter Property="Command" Value="{Binding SomeCommand}"/>
实际上,如果希望仅在枚举的一种状态下单击按钮,则可以绑定到“ SomeCommand”并创建仅在选择特定枚举类型时启用的命令。
例如
<Button Command={Binding SomeCommand} >
Style...
</Button>
您可以在视图模型中完成
SomeCommand = new RelayCommand(SomeMethod, ()=> ProcessState == ProcessState.Terminated);