C# 转换器没有';我没接到电话
我在xaml中声明了转换器: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"); } } 但转换器从未被调用?任何建议都很好。提前谢谢。我能
<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有不同的值,那么如何计算列宽呢?