我正在处理我的第一个 WPF/MVVM 项目,我很难全神贯注于一些事情。该项目将成为已在 VB 中创建的内容的独立应用程序,因此所有逻辑和业务规则都已经存在。
我遇到的问题是尝试实现绑定(bind)。我的应用程序上有几个按钮,它们的所有属性(IsEnabled、文本、图像)都依赖于一个枚举。枚举基于状态并存在于模型中。
在 VB 应用程序中,我有一个巨大的 switch 语句来刷新按钮的属性,并且在状态可能发生变化的每个地方都调用它。所以对于这个版本,我的 ViewModel 中的每个按钮都有一个 bool 值和字符串,基于状态,但无法在每次状态更改时强制它更新(这种情况非常频繁)。
我已经阅读了一些关于 INotifyPropertyChanged 的内容,但是需要在我的 ViewModel 中启动更改的属性在我的模型中。我是不是用错了方法?
最佳答案
我会在您的按钮样式中使用 DataTrigger
。每当绑定(bind)值更新时,DataTrigger
都会重新求值,并在必要时设置新值
<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding MyEnumProperty}"
Value="{x:Static local:MyEnum.Value1}">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Content" Value="Value 1" />
</DataTrigger>
<DataTrigger Binding="{Binding MyEnumProperty}"
Value="{x:Static local:MyEnum.Value2}">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
您可以对 Image
样式做同样的事情 - 根据当前值在 DataTrigger
中设置 Image.Source
属性Status 枚举的一部分是。
请记住,您的 MyEnumProperty
需要在更改时发出 PropertyChange 通知,以便 UI 知道该值已更改并更新任何依赖于该值的绑定(bind)。
关于wpf - 来自 Enum 的 MVVM 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688730/