如何在MVVM风格中进行图像绑定?

时间:2013-10-01 13:28:27

标签: wpf mvvm

我正在尝试使用带图像和文本的按钮,并使用绑定到我的ButtonCommandViewModel。我的ButtonCommandViewModel需要什么样的属性才能将Image绑定到符合MVVM概念的属性?我应该只有一个Image,一个URL,或者Image标签可以通过转换器运行的某种字符串吗?

 <Button Command="{Binding Command}">
     <Button.ContentTemplate>
         <DataTemplate>
             <StackPanel>
                 <Image />
                 <TextBlock Text="{Binding DisplayName}" />
             </StackPanel>
         </DataTemplate>
     </Button.ContentTemplate>
 </Button>

上面的xaml是我正在尝试用于项目模板的。

3 个答案:

答案 0 :(得分:5)

您必须绑定Image控件的Source属性,该属性的类型为ImageSource

WPF具有从stringUribyte[]ImageSource的内置类型转换,无需使用绑定转换器。

只要您的图像可以从URI字符串或字节数组(包含编码的位图帧,例如PNG)创建,您就可以选择您喜欢的属性类型。 string可能是最简单的,但其他人也完全合法。

但是,当ViewModel动态创建图像时,ImageSource(或派生类型)通常是更合适的选项而不使用绑定转换器。

答案 1 :(得分:1)

您应该只使用Uri。您希望将UI与数据分开,因此不要将控件放在ViewModel 中。这就是我所教的,至少。

答案 2 :(得分:1)

是的,使用Uri / string(我更喜欢Uri)来数据绑定Image.Source属性。

<Image Source="{Binding SourceUri}" />

除此之外,请记住以下几点。 1.将图像添加到项目时,请确保将“构建”操作设置为“资源”。 2.如果要从其他项目访问图像,请使用pack Uri