将XAML属性绑定到codebehind中的任意对象

本文关键字:任意 对象 codebehind XAML 属性 绑定 | 更新日期: 2023-09-27 18:29:22

我觉得这应该很容易,但在过去的几个小时里,我一直在尝试解决方案,但似乎什么都不起作用。

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

<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;

这最终使我在输出窗口中没有绑定错误,但实际上并没有绑定任何内容。做这件事的标准方法是什么?

将XAML属性绑定到codebehind中的任意对象

这是各种错误的,这里只有几个指针:

  • 依赖属性是绑定的目标,而不是源
  • 你在哪里设置Obj?你设置的有name属性吗

然后,了解FrameworkElement.DataContext以及可以实现的通知接口,以通知依赖属性有关数据源更改的信息。查看其他人的代码,例如ViewModels的外观以及它们与UI的绑定方式。