【发布时间】:2012-09-29 18:28:26
【问题描述】:
我有一个 WPF 应用程序,我在其中使用了多个图像。大多数图像都在 XAML 代码中设置,因为它们不再更改。我所有图像文件的 Build Action 设置为 "Resource",Copy to Output Directory 设置为 "Do不复制”。它们按预期显示,以下是它们的设置示例:
<ribbon:RibbonApplicationMenu SmallImageSource="/Voetbal;component/Images/Ball_16.png">
//or
<ribbon:RibbonButton LargeImageSource="/Voetbal;component/Images/Calendar_32.png" />
//or
<Image Source="/Voetbal;component/Images/remove.png" Width="16" Height="16" />
但我也有必须通过 C# 设置的图像。在 UserControl 中,我有一个 ListView,其中包含带有以下标记的特定列:
<GridViewColumn Header="" Width="32">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Icon}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
ListView 的 ItemsSource 是一个通用列表,其中包含将填充 ListView 的项目的实例。这些项目有两个字符串字段和一个 ImageSource(名为“Icon”)。我这样设置图标属性:
var icon = new BitmapImage(new Uri("/Images/Gold_16.png", UriKind.RelativeOrAbsolute));
myViewModel.Items[0].Icon = icon;
但问题是我在 ListView 中看不到图像。我也尝试过以下代码。我在 SO 和其他论坛上使用了这些来自类似问题的答案的文章。不是我偷懒或者什么都没尝试,而是我不知道如何解决这个问题……
var icon = new BitmapImage(new Uri("/Voetbal;component/Images/Gold_16.png", UriKind.RelativeOrAbsolute));
//or
var icon = new BitmapImage();
icon.BeginInit();
icon.UriSource = new Uri("pack://application:,,,/Voetbal;component/Images/Gold_16.png");
icon.EndInit();
//or
var icon = new BitmapImage();
icon.BeginInit();
icon.UriSource = new Uri("pack://application:,,,/Images/Gold_16.png");
icon.EndInit();
PS:我知道我的 ViewModel 的绑定有效,因为这两个字符串属性正确显示在 ListView 的其他列中。
有谁知道如何设置 ImageSource 并将其正确绑定到 ListView?
提前致谢!
【问题讨论】:
-
输出窗口中是否有任何绑定错误?顺便说一句,你的视图模型的
Icon属性可以是string,不需要在代码中构造ImageSource。 -
没有任何绑定错误或异常。所以你的意思是 Icon 可以是一个字符串,但是值应该是什么?因为我尝试了 Ehsan 的建议,但没有成功。
-
值应该是一个包 URI:msdn.microsoft.com/en-us/library/aa970069.aspx
-
正如您在我的原始帖子中看到的那样,我尝试了几种方法。因此我的问题是:那么价值应该是多少?
-
我测试了一些额外的代码:StackOverFlow_ListView
标签: c# wpf mvvm datacontext imagesource