我有一个实现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
。我尝试了几件事:
以前编写的转换器起作用。有想法吗?
答案 0 :(得分:3)
请确保您的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();
}
}
您也可以尝试出于调试目的临时使用property元素语法:
<Rectangle>
<Rectangle.Fill>
<Binding Path="Status" ElementName="userControl">
<Binding.Converter>
<local:StatusToBrushConverter />
</Binding.Converter>
</Binding>
</Rectangle.Fill>
</Rectangle>
答案 1 :(得分:2)
在xaml文件中设置以前编写的工作转换器,以查看问题是否仍然存在,并将问题隔离到xaml(或您编写的转换器)中。
答案 2 :(得分:0)
解决方案如下:Converter在类库中。应该不会有问题,并且对于其他转换器也没有问题。但是我在WPF项目中移动了Converter,现在它可以工作了。我没有在Converter中进行任何更改。
今天早晨打开计算机时,带有错误消息的初始错误消失了。 Visual Studio的几次重新启动还不够。只是PC重新启动就可以了。
谢谢您的建议。我尝试了所有这些。
答案 3 :(得分:-2)
作为转换器的替代者,可以在VM上创建关联的Notified属性以提供相关颜色。
例如,说您的颜色实际上是从另一个名为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}"/>
因此,颜色变化无需将特洛伊木马程序转换成该过程。