Изменение свойства DependencyProperty, с которым я связываюсь во время выполнения - PullRequest
0 голосов
/ 01 апреля 2009

Я использую 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 Ответ

1 голос
/ 01 апреля 2009

Вы не описали, как пользователь изменяет целевое свойство зависимости. Можете ли вы просто хранить DependencyProperty сами, а не string с? Таким образом, вам не нужно делать никаких преобразований вообще. Псевдо-код:

//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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...