2009-04-01 3 views
0

Я использую WPF и имею класс данных, который я привязываю к DependencyProperties элемента управления. Мне нужно изменить привязку во время выполнения под контролем пользователя. В идеале я хотел бы быть в состоянии сделать что-то вроде этогоИзменение зависимости DependencyProperty во время выполнения

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

Вы не описали, как пользователь изменяет свойство целевой зависимости. Можете ли вы просто сохранить DependencyProperty s, а не 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 
} 

Edit после комментариев: Вы можете использовать DependencyPropertyDescriptor.FromName, чтобы получить DependencyProperty от его имени, если вы знаете тип владельца:

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

пользователем для различных причины будут вести это из Excel, поэтому необходимо преобразовать строку, содержимое ячейки Excel в DP. Мне нравится ваша идея AllowedProperties, но все равно будет проблема с ChosenProperty. – MrTelly

+0

Я вижу. Я обновил свой пост соответственно. –

+0

Thats точно, что я был после - приветствия. BTW Ваш код-ресивер помог мне выйти из ямы некоторое время назад - спасибо снова – MrTelly

Смежные вопросы