【发布时间】:2014-06-24 13:33:10
【问题描述】:
我有一个绑定到 ImageMetadata 类的 ObservableCollection 的列表框。 Listbox 的项模板定义为
<Image Source="{Binding Converter={StaticResource ImageConverter}}" />
ImageConverter 写成
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var metadata = (ImageMetadata)value;
if (metadata.IsPublic)
{
//code to return the image from path
}
else
{
//return default image
}
}
ImageMetadata 是“模型”类,写成
class ImageMetadata : INotifyPropertyChanged
{
public string ImagePath
{
......
}
public bool IsPublic
{
......
}
}
当图像更新时,我将触发 PropertyChanged 事件,如下所示
NotifyPropertyChanged("ImagePath");
这里的问题是: NotifyPropertyChanged 事件将不起作用,因为我将更改的属性名称指定为“ImagePath”并且绑定到“ImageMetadata”对象而不是'ImagePath' 属性。
我不能使用
<Image Source="{Binding ImagePath, Converter={StaticResource ImageConverter}}" />
因为我还需要 IsPublic 属性来决定显示哪个图像。
如何修改代码以正确触发 PropertyChanged 事件?
编辑:我正在为 Windows phone 8 开发。
【问题讨论】:
-
之前有一个similar question。看看有没有帮助。
-
Style是如何设置你的Source属性的,在样式内部你可以使用DataTriggers来定义当ImagePath发生变化时会发生什么。 -
您也可以采用 MVVM 方式并添加一个视图模型类(可能派生自您的
ImageMetadata模型类),它通过另一个属性提供图像。 -
@Clemens,你能解释一下吗?你也看过icebat在上面的评论吗?你推荐类似的东西吗?
-
您可以添加另一个属性,该属性以类似于转换器的方式返回图像。但是,您可能不希望在模型类中拥有此属性,因此您可以将它放在“中间”类中,即所谓的视图模型中。您可以在网上搜索 MVVM 以获取有关此模式的更多信息,该模式已成为 WPF、Silverlight 和 Windows Store 应用程序中的标准架构模式。
标签: c# .net wpf xaml windows-phone-8