Можно ли привязать имена тегов XAML?

#c# #wpf #data-binding

#c# #wpf #привязка данных

Вопрос:

У меня простой вопрос.. Можно ли использовать привязку таким образом:

 <my:{Binding Path=Foo} />
  

Причина, по которой я хочу это сделать, заключается в том, что мне нужно foo изменить, используя условную компиляцию, например:

 #if BAR
   var foo = "FooBar"
#endif
  

Ответ №1:

Насколько я знаю, динамические изменения в самой разметке XAML невозможны в WPF. Если вам действительно нужно иметь что-то подобное, я бы посоветовал вам использовать один из ваших возможных классов в XAML, чтобы поддерживать поддержку дизайна и иметь действительный файл XAML, а затем написать небольшой инструмент, который просматривает все ваши файлы xaml перед компиляцией и обменивается Foo Bar ими, если выполняется определенное условие. Очевидно, вам нужно будет убедиться, что Foo и Bar они также взаимозаменяемы.

Фактически ваш XAML будет выглядеть следующим образом

 <my:Foo .../>
  

и ваш инструмент будет проверять условие, а затем обмениваться Foo с Bar ним во всех ваших файлах xaml.

Ответ №2:

Вы хотите привязать к другому свойству на основе директивы препроцессора? Мне кажется, это нелегко сделать. Не лучше ли было бы, чтобы Xaml использовал то же свойство, но для свойства использовал другое тело / поле:

 public string MyDebugFoo { get; set; }
public string MyOtherFoo { get; set; }

public string Foo {
#if DEBUG
  get { return MyDebugFoo; } }
  set { MyDebugFoo = value; } }        
#else
  get { return MyOtherFoo; } }
  set { MyOtherFoo = value; } }
#endif 
}