2010-03-28 201 views
7

我正在使用MVVM,并试图以这种方式将Image的Source属性绑定到我的ViewModel,以便我可以即时更改图标。这是什么最好的模式?我仍然可以灵活地改变我的ViewModel以适应,但我不知道从xaml或ViewModel开始。MVVM中的WPF数据绑定Image.Source

要清楚,我不希望我的ViewModel知道具体图像(这是视图知道)​​,只是触发不同图像的状态。现在我只有两个州,比如说红色和绿色。我应该创建一个Enum属性还是一个bool?然后我如何禁止切换图像源?

回答

10

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

VisualStateManager将这项工作为好,但需要WPF期货或.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“,但是当您的枚举在VM中设置为”Image2“时,它会切换到2.png。更多DataTriggers可以根据需要添加。

+0

我正在使用.Net 4.你可能可以详细说明这一点吗?也许是一个例子? – BrettRobi 2010-03-28 01:15:01

+0

我是第二个里德的解决方案。在视图中使用枚举,并在视图中使用数据触发器。 http://msdn.microsoft.com/en-us/library/system.windows.datatrigger.aspx – 2010-03-28 01:27:34

+0

@BrettRobi:你去 – 2010-03-28 01:32:09