在没有路径的情况下绑定数据时触发PropertyChanged事件

时间:2014-05-07 14:06:01

标签: c# .net wpf xaml windows-phone-8

我有一个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开发。

1 个答案:

答案 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;
}