代码之家  ›  专栏  ›  技术社区  ›  MrTelly

更改运行时绑定到的DependencyProperty

  •  0
  • MrTelly  · 技术社区  · 15 年前

    我使用的是WPF,并且有一个数据类,我将它绑定到控件的DependencyProperties。我需要在运行时在用户的控制下更改绑定。理想情况下,我想做这样的事情

    myControl.SetBinding(UserControl.GetDependencyProperty("HeightProperty")
        , myBinding);
    

    当然,获取字符串的getDependencyProperty不起作用,我通过创建自己的静态类来解决这个问题。

            public static DependencyProperty GetDP(string Name)
            {
                switch (Name)
                {
                    case "Height": return UserControl.HeightProperty;
                    case "Width": return UserControl.WidthProperty;
    ....
                }
    

    有更好的方法吗?

    1 回复  |  直到 13 年前
        1
  •  1
  •   Tim Cooper    13 年前

    您还没有描述用户如何更改目标依赖项属性。你能把 DependencyProperty 他们自己而不是 string S?这样你就不用做任何转换了。伪代码:

    //just an array of all allowable properties
    public DependencyProperty[] AllowedProperties { get; }
    
    //the property the user has chosen
    public DependencyProperty ChosenProperty { get; set; }
    
    //called whenever ChosenProperty changes
    private void OnChosenPropertyChanged()
    {
        //redo binding here, using ChosenProperty as the target
    }
    

    评论后编辑 :如果知道所有者的类型,则可以使用DependencyPropertyDescriptor.FromName从其名称中获取DependencyProperty:

    var descriptor = DepedencyPropertyDescriptor.FromName(nameFromExcel, typeof(YourUserControl), typeof(YourUserControl));
    var dependencyProperty = descriptor.DependencyProperty;