转换器不被调用

时间:2018-11-08 01:07:17

标签: c# wpf mvvm converters

我在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");
    }
}

但是转换器永远不会被调用?任何建议都很好。预先谢谢你。

1 个答案:

答案 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; 
}