1

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

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

上面的 xaml 是我试图用于项目模板的内容。

4

3 回答 3

5

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

WPF 具有内置的类型转换 from和to ,string而不需要绑定转换器。Uribyte[]ImageSource

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

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

于 2013-10-01T13:45:10.690 回答
1

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

于 2013-10-01T13:30:53.833 回答
1

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

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

除此之外,请记住以下几点。1. 当您将图像添加到项目时,请确保将 Build 操作设置为“Resource”。2. 如果你想从另一个项目访问图像,请使用pack Uri

于 2013-10-01T16:06:46.603 回答