代码之家  ›  专栏  ›  技术社区  ›  Andrey Shchekin

wpf应该如何评估属性路径?

  •  10
  • Andrey Shchekin  · 技术社区  · 15 年前

    我正在编写一个自定义控件,并且我有一个字符串形式的属性路径(想想 comboBox.SelectedValuePath )。
    在代码中,为任意对象计算该字符串的最佳方法是什么?

    显然,我可以自己分析它,但这是一个黑客,我希望路径支持一切 组合框.selectedValuePath 做(为了一致性)。

    结果(感谢Aran Mulholland):

    对这个的性能不太确定,但我现在不太关心这个性能。

    public class BindingEvaluator {
        #region Target Class
    
        private class Target : DependencyObject {
            public static readonly DependencyProperty ResultProperty = DependencyProperty.Register(
                "Result", typeof(IEnumerable), typeof(BindingEvaluator)
            );
    
            public object Result {
                get { return this.GetValue(ResultProperty); }
                set { this.SetValue(ResultProperty, value); }
            }
        }
    
        #endregion
    
        public object GetValue(object source, string propertyPath) {
            var target = new Target();
            BindingOperations.SetBinding(target, Target.ResultProperty, new Binding(propertyPath) {
                Source = source,
                Mode = BindingMode.OneTime
            });
            return target.Result;
        }
    }
    
    1 回复  |  直到 13 年前
        1
  •  6
  •   Aran Mulholland JohnnyAce    15 年前

    创建一个具有类型对象的一个依赖属性的对象,将属性路径设置为路径,将任意对象设置为源。将执行绑定,您可以看到属性路径末尾的内容(如果有)。这是我在代码中找到的唯一做这种事情的方法。您可以编写一个递归反射引擎,该引擎可以遵循属性路径,但它已经完成了,我们在绑定时使用它。花五分钟时间写:)