如何解决调试输出中不影响WPF应用程序的BindingExpression路径错误
本文关键字:应用程序 WPF 影响 BindingExpression 错误 路径 何解决 解决 输出 调试 | 更新日期: 2023-09-27 18:12:57
我的应用程序运行和渲染正确,但我注意到在我的调试输出中有许多错误,当窗口加载时。在Itemscontrol中,每个项目都有3个错误,加起来是100个。
Itemscontrol DataTemplate有一个Path对象,它的DataContext绑定到一个属性上,该属性通过IValueConverter传递,该IValueConverter返回一个匿名类型,Path object上的属性绑定到该属性上。
<Path Grid.Column="0" Grid.Row="0" Margin="5,1,2,1" StrokeThickness="2"
DataContext="{Binding Path=Value, Converter={StaticResource ShapeConverter},
IsAsync=True}" >
<Path.Data>
<Binding Path="Data" IsAsync="True" />
</Path.Data>
<Path.Fill>
<Binding Path="Fill" IsAsync="True" />
</Path.Fill>
<Path.Stroke>
<Binding Path="Stroke" IsAsync="True" />
</Path.Stroke>
</Path>
ShapeConverter是一个IValueConverter,它返回一个要绑定的匿名类型。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int status = System.Convert.ToInt32(value);
var geometry = CreateShapeGeometry(status);
var strokecolor = GetStrokeColor(status);
var fillcolor = GetFillColor(status);
return new
{
Data = PathGeometry.CreateFromGeometry(geometry).ToString(),
Stroke = strokecolor,
Fill = fillcolor
};
}
我理解错误的意思,因为它正在寻找的属性不存在于报警,它们存在于它解析和正确呈现的匿名类型。
我不明白的是如何解决BindingExpression路径错误,不是真正的错误。我也想知道这是否会导致屏幕加载缓慢。
错误如下:
(总结)BindingExpression路径错误:'Fill', 'Stroke', 'Data'属性未在对象上找到报警。
(实际)System.Windows.Data错误:40:BindingExpression路径错误:'Fill'属性未在'object' " Alarm " (HashCode=37465686)'上找到。BindingExpression:路径=填补;DataItem ="警报"(HashCode = 37465686);目标元素是'Path' (Name= ");目标属性为"填充"(类型为"画笔")
System.Windows。数据错误:40:BindingExpression路径错误:'Stroke'属性在'object' ''Alarm' (HashCode=37465686)'上找不到。BindingExpression:路径=中风;DataItem ="警报"(HashCode = 37465686);目标元素是'Path' (Name= ");目标属性是'Stroke'(类型为'Brush')
System.Windows。数据错误:40:BindingExpression路径错误:'object' '' Data'属性未找到" Alarm " (HashCode=37465686)'。BindingExpression:路径=数据;DataItem ="警报"(HashCode = 37465686);目标元素是'Path' (Name= ");目标属性为'Data'(类型为'Geometry')
经过一些修改,我不确定这个问题与匿名类型有什么关系。我改变了转换方法,但它没有改变我的输出。
public class Foo
{
public string Data { get; set; }
public SolidColorBrush Stroke { get; set; }
public SolidColorBrush Fill { get; set; }
}
转换方法
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int status = System.Convert.ToInt32(value);
var geometry = CreateShapeGeometry(status);
var strokecolor = GetStrokeColor(status);
var fillcolor = GetFillColor(status);
Foo f = new Foo { Data = PathGeometry.CreateFromGeometry(geometry).ToString(), Stroke = strokecolor, Fill = fillcolor };
return f;
}
有很多资源都在谈论绑定错误会降低应用程序的性能。
参见第7条- http://blogs.msdn.com/b/visualstudio/archive/2010/03/02/wpf-in-visual-studio-2010-part-2-performance-tuning.aspx
最后我发现,虽然您可以在匿名类型上创建和绑定属性,甚至可以在值转换器返回的已定义类的实例上创建和绑定属性,但在进行绑定时,它会遇到但会克服调试错误。
在这种情况下的另一种方法是创建一组样式,而不是作为静态资源,然后绑定Path对象的Style属性。参见绑定WPF样式