我有一个转换器,它实现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中,我将转换器添加为资源,并将绑定添加到Element
<UserControl.Resources>
<Converters:StatusToBrushConverter x:Key="StatusConverter"/>
</UserControl.Resources>
<Rectangle Fill="{Binding Status, Converter={StaticResource StatusConverter}, ElementName=userControl}"/>
但我不断得到错误
“StatusToBrushConverter”类型的对象不能应用于期望类型为“System.Windows.Data.IValueConverter”的属性
但转换器实现了接口IValueConverter
。我尝试了几件事:
以前编写的转换器工作。思考?
确保您的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>
将以前编写的工作转换器设置在xaml文件中,以查看问题是否仍然存在,并将问题隔离到xaml(或您编写的转换器)。
解决方案如下:转换器位于类库中。应该不是问题而且对于其他转换器没问题。但我在WPF项目中移动了转换器,现在它工作了。我没有更改转换器中的任何内容。
今天早上打开电脑时,错误信息的初始错误消失了。视觉工作室的几次重启是不够的。只是PC重启就行了。
谢谢你的提议。我尝试了所有这些。
作为转换器的替代,可以在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}"/>
因此,颜色的变化,而不必特洛伊木马转换器进入过程。