【问题标题】:Get result of a Binding in code获取代码中的绑定结果
【发布时间】:2010-10-07 22:07:42
【问题描述】:

我可能正在寻找错误的方式,但是:

有没有办法通过代码获取绑定的结果值?

可能是一些很明显的东西,但我就是找不到。

【问题讨论】:

    标签: wpf data-binding


    【解决方案1】:

    只需要调用绑定的ProvideValue方法即可。困难的部分是您需要将有效的IServiceProvider 传递给方法... 编辑:实际上,这不是真的...ProvideValue 返回一个BindingExpression,而不是绑定的属性。

    您可以使用以下技巧:

    class DummyDO : DependencyObject
    {
        public object Value
        {
            get { return (object)GetValue(ValueProperty); }
            set { SetValue(ValueProperty, value); }
        }
    
        public static readonly DependencyProperty ValueProperty =
            DependencyProperty.Register("Value", typeof(object), typeof(DummyDO), new UIPropertyMetadata(null));
    
    }
    
    public object EvalBinding(Binding b)
    {
        DummyDO d = new DummyDO();
        BindingOperations.SetBinding(d, DummyDO.ValueProperty, b);
        return d.Value;
    }
    
    ...
    
    Binding b = new Binding("Foo.Bar.Baz") { Source = dataContext };
    object value = EvalBinding(b);
    

    不是很优雅,但它可以工作......

    【讨论】:

    • 我正在尝试做类似的事情,但遇到了问题,我想是因为我需要使用RelativeSource。知道如何避免相对源被评估为 DummyDO 而不是绑定上下文中隐含的目标吗?
    • @tobriand,我不确定我是否理解......你的用例是什么?
    • 基本上,我有一个附加的行为,我希望能够将其分配给任意分配的属性,因此我传递的是 Binding 对象而不是其结果。我的想法是,一旦我的行为激活,我应该能够稍后对此进行评估。但是,由于我试图以 WPF 控件的属性为目标,因此我最终使用了 RelativeSource 等,这导致消息类似于“在 DummyDO 类型上找不到属性背景”。 IE。它不使用绑定的原始位置作为参考点 - 它使用 DummyDO...
    • stackoverflow.com/q/27568421/302677 参考@tobriand的问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多