wpf - 来自 Enum 的 MVVM 绑定(bind)

标签 wpf mvvm binding inotifypropertychanged

我正在处理我的第一个 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/

相关文章:

.net - 内存利用率 : WPF vs Windows Forms

c# - CHM文件左侧树形 View 如何设置选中项

WPF MVVM Combox在验证失败时不保留旧值

c# - 为什么要使用 MVVM?

MVVM Prism 嵌套区域找不到子区域

WPF:如何仅绑定(bind)到集合中的一项,而不使用 ItemsControl,因为我不想显示所有项

c# - 如何识别点击了哪个按钮? (MVVM)

javascript - 自定义输入组件忽略来自方法的更新

c# - UserControl 属性绑定(bind)问题

c# - 如何在 Xamarin.Forms 的 ListView 中绑定(bind)列表