我在xaml中声明了转换器:
<local:StringToWidthConverter x:Key="Converter" />
和
<GridViewColumn Header="Monitor 4"
Width="{Binding Monitor4, Converter={StaticResource Converter}, ConverterParameter=Auto}">
转换器类定义为:
public class StringToWidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (string)value == null ? 0.0 : parameter;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
Monitor4的定义是:
public string Monitor4
{
get { return monitor4; }
set
{
monitor4 = value;
OnPropertyChanged("Monitor4");
}
}
但是转换器永远不会被调用?任何建议都很好。预先谢谢你。
答案 0 :(得分:2)
我唯一想到的原因是您忘记设置DataContext
,所以根本没有绑定的源。
this.DataContext = The_View_Model;
如果DataContext
设置正确,您如何知道转换器未执行?在Convert
方法中设置一个断点,断点是否命中?
如果您正确设置了DataContext
,但是某些绑定无法正常工作,请查看“输出”窗口,应该有一些绑定错误-与未处理的异常不同,VS只会静默记录绑定错误,而不会终止应用程序。
例如,如果您绑定到一个事实不存在的属性Monitor4
:
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“ ConverterWindow”(名称=“)”上找不到“ Monitor4”属性。 BindingExpression:Path = Monitor4; DataItem ='ConverterWindow'(Name ='');目标元素是'Grid'(Name ='');目标属性为“宽度”(类型为“双精度”)
如果值转换器无法正常工作
System.Windows.Data错误:6:'DynamicValueConverter'转换器无法转换值'Auto'(类型'String')
根据您的情况,您无法将字符串值Auto
转换为Double
。您可以改为返回System.Double.NaN
。
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (string)value == null ? 0.0 : System.Double.NaN;
}