Я использую XML как источник моего приложения через связывание.в xml есть список папок и путь к образцу изображения для каждой папки.Список папок привязывается к списку, а другой дисплей привязывается к выбранному элементу списка, который является элементом списка xml (тип XmlNode).Я добавил возможность добавлять и удалять элементы, используя XmlDocument, который был скопирован из xml XmlProvider и сохранен в исходном файле.
Проблема начинается, когда список источников пуст, либо при загрузке приложениявремя или после удаления всех предметов.в этот момент все связанные с дисплеем значения дисплея равны нулю.Я решил все привязки с помощью свойства привязки TargetNullValue, за исключением свойства image_source фонового изображения canvas, которое ничего не показывает.
Я пытался использовать конвертер, но когда отлаживал его, я видел что-то странное.если в списке были элементы, преобразователь возвращал то, что должен, и изображение отображалось, но если список был пуст, преобразователь возвращал то, что должен, и изображение не отображалось!Пожалуйста, помогите мне.
Код:
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;
}
}