我通过绑定使用 xml 作为我的应用程序的源。在 xml 中有一个文件夹列表和每个文件夹的示例图像的路径。文件夹列表绑定到listbox,另外一个显示绑定到listbox的选中项,是xml列表(类型XmlNode)的一项。我添加了使用由 XmlProvider 从 xml 复制的 XmlDocument 添加和删除项目的操作,并将其保存到源文件中。
当源列表为空时,无论是在应用程序加载时,还是在删除所有项目之后,问题就开始了。此时显示的所有绑定值都为空。我使用绑定的 TargetNullValue 属性解决了所有绑定,除了画布背景 imagebrush image_source 属性没有显示任何内容。
我尝试使用转换器,但是当我调试它时,我看到了一些奇怪的东西。如果列表中有项目,则转换器返回应有的内容并显示图像,但如果列表为空,则转换器返回应有的内容并且不显示图像!请帮助我。
代码:
XML:
<Folders>
<Folder Id="1">
<Path>folder3\1</Path>
<SampleImage>C:\images\2011-09-22\site3\1\6.jpg</SampleImage>
</Folder>
</Folders>
XAML:
<Canvas.Background>
<ImageBrush x:Name="SampleImage" Stretch="Uniform" >
<ImageBrush.ImageSource>
<MultiBinding Converter="{StaticResource ImageConverter}" Mode="OneWay">
<Binding XPath="./SampleImage" />
<Binding Source="C:\images\SampleImages\no_image.jpg"/>
</MultiBinding>
</ImageBrush.ImageSource>
</ImageBrush>
</Canvas.Background>
C#:
public class ImageConverter : IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ImageSourceConverter imageConverter = new ImageSourceConverter();
bool bool1=value[0].Equals(DependencyProperty.UnsetValue);
if (value[0] != null &&!bool1) //if the source isn't null
{
//this works fine
return imageConverter.ConvertFromString(value[0].ToString());
}
//here the converter returns the right object but the alternate image isn't shown and the background left blank
return imageConverter.ConvertFromString(value[1].ToString());
//here too the converter returns the right object but the alternate image isn't shown and the background left blank
//return imageConverter.ConvertFromString(@"C:\images\SampleImages\no_image.jpg");
}
public object[] ConvertBack(object value, Type[] targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}