MVVM 中的 WPF 数据绑定(bind) Image.Source

标签 wpf data-binding mvvm

我正在使用 MVVM,并尝试将 Image 的 Source 属性数据绑定(bind)到我的 ViewModel,以便我可以动态更改图标。为此应遵循的最佳模式是什么?我仍然可以灵活地更改我的 ViewModel 以适应,但我不知道从 xaml 或 ViewModel 的哪里开始。

需要明确的是,我不希望我的 ViewModel 了解特定图像(这是 View 需要知道的),而只是了解触发不同图像的状态。现在我只有两个状态,比如说红色和绿色。我应该创建一个枚举属性还是一个 bool 值?那么如何通过数据绑定(bind)来切换图像源呢?

最佳答案

您可以使用 DataTrigger,并根据 ViewModel 中的属性值更改图像(完全在 XAML 中)。我个人会使用枚举,因为您可能需要多个状态。

VisualStateManager 也适用于此,但需要 WPF Futures 或 .NET 4。

为了使用 DataTrigger,您可以执行以下操作:

<Image>
  <Image.Style>
    <Style TargetType="Image">
      <Setter Property="Source" Value="1.png" />
      <Style.Triggers>
         <DataTrigger Binding="{Binding ViewModelEnumProperty}" Value="Image2">
             <Setter Property="Source" Value="2.png" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Image.Style>
</Image>

这将使用“1.png”,但是当您的枚举在虚拟机中设置为“Image2”时,它将切换为 2.png。可以根据需要添加更多数据触发器。

关于MVVM 中的 WPF 数据绑定(bind) Image.Source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2531539/

相关文章:

c# - 显示用于更改 ViewModel 状态的交替图像

asp.net - 来自 Ajax 的数据绑定(bind) ASP.Net 中继器

.net - TPL WPF MVVM 如何使其工作?

wpf - MVVM - 使用 View 模型 DataTemplate 在 XAML 中创建 View 时出现绑定(bind)表达式错误

c# - Caliburn.Micro ItemsSource 未绑定(bind)到当前 View 模型,而是绑定(bind)到父级

wpf - 限制其容器内的 WPF 元素宽度

c# - 显示列表中的重复项 c#

android - Activity 不显示 RecyclerView - 数据绑定(bind)

wpf - 找不到与引用绑定(bind)的源... databound ListView 问题

c# - 您如何根据在此问题中所做的按键字母选择列表框中的项目,但在 UWP 中?