我有一个Listbox绑定到ImageMetadata类的ObservableCollection。列表框的项目模板定义为
<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是&#39;模型&#39;写成的课程
class ImageMetadata : INotifyPropertyChanged
{
public string ImagePath
{
......
}
public bool IsPublic
{
......
}
}
更新图像后,我将触发PropertyChanged事件,如下所示
NotifyPropertyChanged("ImagePath");
问题在于: NotifyPropertyChanged事件无效,因为我将更改后的属性名称指定为&#39; ImagePath&#39;并且绑定到了ImageMetadata&#39;对象而不是&#39; ImagePath&#39;属性。
我无法使用
<Image Source="{Binding ImagePath, Converter={StaticResource ImageConverter}}" />
因为我还需要IsPublic属性来决定要显示哪个图像。
如何修改代码以正确触发PropertyChanged事件?
编辑:我正在为Windows Phone 8开发。
答案 0 :(得分:2)
您可以将MultiBinding
与多值转换器配合使用:
<Image>
<Image.Source>
<MultiBinding Converter="{StaticResource ImageConverter}">
<Binding Path="ImagePath"/>
<Binding Path="IsPublic"/>
</MultiBinding>
</Image.Source>
</Image>
Convert方法如下所示:
public object Convert(
object[] values, Type targetType, object parameter,CultureInfo culture)
{
object result = null;
if (values.Length == 2 && values[0] is string && values[1] is bool)
{
var imagePath = (string)values[0];
var isPublic = (bool)values[1];
...
}
return result;
}