Wpf绑定路径的性能影响= {x:静态<propertypath>}?</propertypath>

时间:2010-09-09 07:01:18

标签: wpf data-binding xaml

我有一个CLR实例属性,一个指向实例属性的静态PropertyPath和一个直接使用静态PropertyPath的xaml绑定,如下所示:

注意:GetPropertyPath只是一个方法,它根据成员名称中给定的linq表达式返回属性路径。



    public static PropertyPath MyPropertyPath = GetPropertyPath(p=> p.MyProperty);

    private object _myProperty;

    public object MyProperty
    {
       get{ return _myProperty;}
       set 
       {
         _myProperty = value;
         OnPropertyChanged(MyPropertyPath.Path);
      }
    }


然后使用MyViewModel作为标准mvvm方式的datacontext,xaml绑定如下:

 
    {Binding Path={x:Static myNamespace:MyViewModel.MyPropertyPath}}

这种方法具有很大的好处,因为代码不使用任何未作为构建的一部分进行检查的引用。如果在viewmodel代码中更改了某些内容,则xaml绑定会在构建时出错,如果它们不再正确的话。

我的问题是,是否有人意识到这种方法可能产生的负面影响?

2 个答案:

答案 0 :(得分:0)

前段时间我们只测试了问题的第一部分。 OnPropertyChanged(string propertyName)OnPropertyChanged(Expression<Func<object>> expression)之间的效果差异是什么?后者类似于您的GetPropertyPath()方法,它比基于原始字符串的方法慢了约2.5倍(569 ms与1 000 000次迭代时的1464 ms相比)。这似乎不是代码清晰度的巨大代价,尽管在使用Expressions时不应忽视内存影响。

我的一般建议是在非密集型计算中使用表达式,否则请避免使用它们。我从未在代码的这一特定部分发现瓶颈 - 总有一些东西明显变慢......

答案 1 :(得分:0)

我认为GetPropertyPath()的影响在这里是相当可以忽略不计的,因为我将结果保存在静态变量中,而不是像使用时那样重复调用 'OnPropertyChanged(表达式&gt;表达式)'直接。

然而,我对数据绑定的内部有点模糊,将x:Static属性路径直接提供给xaml提供任何性能改进?我使用x:static?

来降低性能