我正在尝试使用带图像和文本的按钮,并使用绑定到我的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是我正在尝试用于项目模板的。
答案 0 :(得分:5)
您必须绑定Image控件的Source
属性,该属性的类型为ImageSource
。
WPF具有从string
,Uri
和byte[]
到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。