如何解决调试输出中不影响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;
    }

如何解决调试输出中不影响WPF应用程序的BindingExpression路径错误

有很多资源都在谈论绑定错误会降低应用程序的性能。

参见第7条- http://blogs.msdn.com/b/visualstudio/archive/2010/03/02/wpf-in-visual-studio-2010-part-2-performance-tuning.aspx

最后我发现,虽然您可以在匿名类型上创建和绑定属性,甚至可以在值转换器返回的已定义类的实例上创建和绑定属性,但在进行绑定时,它会遇到但会克服调试错误。

在这种情况下的另一种方法是创建一组样式,而不是作为静态资源,然后绑定Path对象的Style属性。参见绑定WPF样式