Нельзя применить конвертер к свойству, которое ожидает тип IValueConverter - PullRequest
3 голосов
/ 09 апреля 2019

У меня есть конвертер, который реализует IValueConverter, но не привязывается к свойству.

public class StatusToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Brushes.Red;
    }

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

}

В XAML я добавил конвертер как ресурс и добавил привязку к элементу

<UserControl.Resources>
    <Converters:StatusToBrushConverter x:Key="StatusConverter"/>
</UserControl.Resources>            

<Rectangle Fill="{Binding Status, Converter={StaticResource StatusConverter}, ElementName=userControl}"/>

Но я постоянно получаю ошибку

Объект типа «StatusToBrushConverter» нельзя применить к свойству, которое ожидает тип «System.Windows.Data.IValueConverter»

Но конвертер реализует интерфейс IValueConverter. Я попробовал несколько вещей:

  • Перестроить, очистить, построить, построить решение и т. Д.
  • Полностью новый конвертер -> Тот же

Работают ранее написанные конвертеры. Мысли?

Ответы [ 4 ]

3 голосов
/ 09 апреля 2019

Убедитесь, что ваш класс StatusToBrushConverter действительно реализует правильный интерфейс IValueConverter, используя его полностью определенное имя:

public class StatusToBrushConverter : System.Windows.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Brushes.Red;
    }

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

Вы также можете временно использовать синтаксис элемента свойства для целей отладки:

<Rectangle>
    <Rectangle.Fill>
        <Binding Path="Status" ElementName="userControl">
            <Binding.Converter>
                <local:StatusToBrushConverter />
            </Binding.Converter>
        </Binding>
    </Rectangle.Fill>
</Rectangle>
2 голосов
/ 09 апреля 2019

Установите ранее написанные рабочие конвертеры в файле xaml, чтобы увидеть, сохраняется ли проблема, и изолируйте проблему в xaml (или конвертере, который вы написали).

0 голосов
/ 10 апреля 2019

Решение было следующим: Конвертер был в библиотеке классов. Не должно быть проблемой и не было проблем для других преобразователей. Но я переместил конвертер в проект WPF и теперь он работает. Я ничего не менял в конвертере.

Первоначальная ошибка с сообщением об ошибке исчезла, когда я сегодня утром включил свой компьютер. Несколько перезапусков визуальной студии было недостаточно. Просто перезагрузка ПК сделала свое дело.

Спасибо за ваши предложения. Я перепробовал их все.

0 голосов
/ 09 апреля 2019

В качестве альтернативы конвертеру можно создать соответствующее свойство Notification на виртуальной машине, чтобы предоставить соответствующий цвет.

Например, скажем, ваш цвет на самом деле выделяется из другого Уведомленного свойства под названием IsValid. Когда IsValid изменяется, это должно изменить цвет на прямоугольнике.

 private bool _isValid;

 public bool IsValid
 {
     get { return _IsValid; }
     set 
     {
         _isValid = value;
         NotifyPropertyChanged("IsValid");
         NotifyPropertyChanged("UserStatusColor");
     }
 }


 public Brush UserStatusColor
 {
     get { return IsValid ? Brushes.Green : Brushes.Red; }
 }

....

<Rectangle Fill="{Binding UserStatusColor}"/>

Следовательно, цвет меняется без необходимости преобразования трояна в процесс.

...