2016-02-10 6 views
0

У меня есть этот переменные связывания с моей точкой зрения:Ошибка привязки при установке «DependencyProperty.UnsetValue;»

<Image Source="{Binding Path=GrappleTypeVar, Source={StaticResource CustomerData}, Converter={StaticResource GrappleDataConverter}}" Width="40" Height="40"/> 

И потом, этот конвертер:

public class GrappleDataConverter : IValueConverter 
{ 
    public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null) 
     { 
      int currentType = (int)value; 

      if (Enum.IsDefined(typeof(GrappleType), currentType)) 
      { 
       switch ((GrappleType)currentType) 
       { 
        case GrappleType.Hydraulic: 
         return String.Empty; 
        case GrappleType.Parallel: 
         return "/GUI;component/Images/040/SensorSoft.png"; 
       } 
      } 
     } 
     // Not defined... Set unknown image 
     return String.Empty; 
    } 

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new System.NotImplementedException(); 
    } 
} 

Используя этот код, мой результат окна возвращается много обязательных ошибки типа:

System.Windows.Data Information: 10: Не удается получить значение, используя привязку, и не существует действительного резервного значения; используя вместо этого по умолчанию. BindingExpression: Path = GrappleTypeVar; DataItem = 'CustomerData' (HashCode = 50504364); целевым элементом является «Изображение» (Name = ''); target is 'Source' (type 'ImageSource') Ошибка System.Windows.Data: 23: Невозможно преобразовать '' из типа 'String' в тип 'System.Windows.Media.ImageSource' для культуры 'en-US' с конверсии по умолчанию; рассмотрим использование свойства преобразования Binding. NotSupportedException: «System.NotSupportedException: ImageSourceConverter не может преобразовать из System.String.

Обзор эту ошибку, я обнаружил, что решение: ImageSourceConverter error for Source=null

И я изменил в своем коде:

case GrappleType.Hydraulic: 
    return String.Empty; 

для

case GrappleType.Hydraulic: 
    return DependencyProperty.UnsetValue; 

Теперь приложение работает гладко, но в В результате окна появляется следующая ошибка привязки: System.Windows.Data Information: 10: Не удается восстановить ve с использованием привязки и не существует допустимого значения возврата; используя вместо этого по умолчанию. BindingExpression: Path = GrappleTypeVar; DataItem = 'CustomerData' (HashCode = 62171008); целевым элементом является «Изображение» (Name = ''); target свойство «Source» (тип «ImageSource»)

Может ли кто-нибудь помочь мне? Можно ли решить эту ошибку?

Спасибо!

+1

'Image.Source' - абстрактный тип' ImageSource' (который не может быть создан). В конвертере вместо строки вы должны вернуть объект производного класса, такой как «BitmapImage». – Peter

ответ

1

Ваш конвертер должен возвращать значение, соответствующее типу целевого свойства, то есть экземпляр типа, производного от ImageSource. Обычно это BitmapImage или BitmapFrame. В случае, если не будет отображаться не образ, он должен вернуть null:

public object Convert(
    object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    object result = null; 

    if (value is GrappleType) 
    { 
     switch ((GrappleType)value) 
     { 
      case GrappleType.Hydraulic: 
       break; 

      case GrappleType.Parallel: 
       result = new BitmapImage(new Uri(
        "pack://application:,,,/GUI;component/Images/040/SensorSoft.png")); 
       break; 
     } 
    } 

    return result; 
} 

Пожалуйста, обратите внимание, как преобразователь использует Resource File Pack URI для создания BitmapImage.

 Смежные вопросы

  • Нет связанных вопросов^_^