Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换器没有';我没接到电话_C#_Wpf_Mvvm_Converters - Fatal编程技术网

C# 转换器没有';我没接到电话

C# 转换器没有';我没接到电话,c#,wpf,mvvm,converters,C#,Wpf,Mvvm,Converters,我在xaml中声明了转换器: <local:StringToWidthConverter x:Key="Converter" /> 监视器4的定义是: public string Monitor4 { get { return monitor4; } set { monitor4 = value; OnPropertyChanged("Monitor4"); } } 但转换器从未被调用?任何建议都很好。提前谢谢。我能

我在xaml中声明了转换器:

<local:StringToWidthConverter x:Key="Converter" />
监视器4的定义是:

public string Monitor4
{
    get { return monitor4; }
    set
    {
        monitor4 = value;
        OnPropertyChanged("Monitor4");
    }
}

但转换器从未被调用?任何建议都很好。提前谢谢。

我能想到的唯一原因是您忘记设置
DataContext
,因此根本没有要绑定的源代码

this.DataContext = The_View_Model; 
如果正确设置了
DataContext
,您如何知道转换器未执行?在
Convert
方法中设置断点,是否命中断点

如果您正确设置了
DataContext
,并且某些绑定不起作用,请查看输出窗口,应该会有一些绑定错误-与未处理的异常不同,VS只会以静默方式记录绑定错误,而不会终止应用程序

例如,如果您绑定到一个属性
Monitor4
,但该属性不存在:

System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“转换器窗口”(名称=“”)上找不到“监视器4”属性。BindingExpression:Path=Monitor4;DataItem='ConverterWindow'(名称='';目标元素为“网格”(名称=“”);目标属性为“宽度”(类型为“双精度”)

如果值转换器工作不正常

System.Windows.Data错误:6:“DynamicValue converter”转换器无法将值转换为“自动”(类型为“字符串”)

在您的情况下,无法将字符串值
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; 
}

我能想到的唯一原因是您忘记设置
DataContext
,因此根本没有要绑定的源代码

this.DataContext = The_View_Model; 
如果正确设置了
DataContext
,您如何知道转换器未执行?在
Convert
方法中设置断点,是否命中断点

如果您正确设置了
DataContext
,并且某些绑定不起作用,请查看输出窗口,应该会有一些绑定错误-与未处理的异常不同,VS只会以静默方式记录绑定错误,而不会终止应用程序

例如,如果您绑定到一个属性
Monitor4
,但该属性不存在:

System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“转换器窗口”(名称=“”)上找不到“监视器4”属性。BindingExpression:Path=Monitor4;DataItem='ConverterWindow'(名称='';目标元素为“网格”(名称=“”);目标属性为“宽度”(类型为“双精度”)

如果值转换器工作不正常

System.Windows.Data错误:6:“DynamicValue converter”转换器无法将值转换为“自动”(类型为“字符串”)

在您的情况下,无法将字符串值
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; 
}

是否在GridViewColumn所在的XAML文件中声明了转换器?@IvanVargas我试图在windows资源和listview资源中声明,但无效。是否在GridViewColumn所在的XAML文件中声明了转换器?@IvanVargas我试图在windows资源和listview资源中声明,不起作用。我只是试图重现这个问题,它不起作用的唯一原因是因为DataContext@briswill你找到原因了吗?@phuzi谢谢你的帮助。我发现了这个问题。我有一个名为“ProfileItem”的类,其中包含属性“Monitor4”。在ViewModel中,有一个绑定到listview的类的列表。类中的每个属性都绑定到listview中的一列。在GridViewColumn级别,它似乎只能绑定到ViewModel中的一个属性,我稍后在ViewModel类中将其定义为“columnwidth”。它成功地与GridViewColumn绑定,转换器能够正常工作。我仍然不明白为什么GridViewColumn不能与其他数据库的属性绑定class@briswill区别在于单个对象(实现INotifyPropertyChanged的ViewModel)与对象列表(ViewModel内部的列表,它是一个obsevableCollection)。在listview中,有许多行,但只有一个标题,所有行共享相同的标题列定义,这就是为什么标题列宽只能绑定到单个对象-ViewModel本身。如果Monitor4属性是在ProfileItem类中定义的,并且您绑定到ObservableCollection列表,那么Monitor4有不同的值,那么应该如何计算列宽呢?我只是试图重现这个问题,它不起作用的唯一原因是因为DataContext@briswill你找到原因了吗?@phuzi谢谢你的帮助。我发现了这个问题。我有一个名为“ProfileItem”的类,其中包含属性“Monitor4”。在ViewModel中,有一个绑定到listview的类的列表。类中的每个属性都绑定到listview中的一列。在GridViewColumn级别,它似乎只能绑定到ViewModel中的一个属性,我稍后在ViewModel类中将其定义为“columnwidth”。它成功地与GridViewColumn绑定,转换器能够正常工作。我仍然不明白为什么GridViewColumn不能与其他数据库的属性绑定class@briswill区别在于单个对象(实现INotifyPropertyChanged的ViewModel)与对象列表(ViewModel内部的列表,它是一个obsevableCollection)。在listview中,有许多行,但只有一个标题,所有行共享相同的标题列定义,这就是为什么标题列宽只能绑定到单个对象-ViewModel本身。如果Monitor4属性是在ProfileItem类中定义的,并且您绑定到ObservableCollection列表,那么Monitor4有不同的值,那么如何计算列宽呢?