将XAML属性绑定到代码隐藏中的任意对象

时间:2012-03-29 19:53:27

标签: c# wpf binding

我觉得这应该很简单,但我花了最后几个小时尝试解决这个问题,似乎没有任何工作。

我在XAML代码中有一个对象,我想将其中一个属性绑定到在c#codebehind中创建的对象。到目前为止,这是我的策略:

<setpwindows:ScalingWindow
    ...
>
    <setpwindows:ScalingWindow.Resources>
        <localwpf:ObjectProvider x:Key="locationProvider"/>
    </setpwindows:ScalingWindow.Resources>
    ...
        ...
            <DataGridTextColumn
                Header="Code Out"
                Binding="{Binding Source={StaticResource locationProvider}, Path=Obj.Name}"
            />
        ...
    ...
</setpwindows:ScalingWindow>

使用ObjectProvider,如下所示:

class ObjectProvider : DependencyObject
{
    private object _obj;
    public object Obj
    {
        get { System.Diagnostics.Debug.WriteLine("Got object as " + _obj); return _obj; }
        set { _obj = value; System.Diagnostics.Debug.WriteLine("Set object to " + _obj); }
    }

    public static readonly DependencyProperty ObjProperty = DependencyProperty.Register("Obj", typeof(object), typeof(ObjectProvider));

    public ObjectProvider() {}
}

初始化窗口后,我将Obj设置为:

WPFObjects.ObjectProvider locProv = this.FindResource("locationProvider") as WPFObjects.ObjectProvider;
locProv.Obj = _tempLocation;

这最终在输出窗口中没有给出任何绑定错误,但它实际上并没有绑定任何东西。这样做的标准方法是什么?

1 个答案:

答案 0 :(得分:3)

这是各种错误,这里只是一些指示:

  • 依赖属性是绑定的目标,而不是源。
  • 你把Obj放在哪里?你设置的是否有名称属性?

然后,了解 FrameworkElement.DataContext 以及您可以实现的通知接口,以通知依赖项属性有关数据源中的更改。看到其他人的代码,例如ViewModels看起来像是如何绑定到UI。