2013-03-20 2 views
3

Можно ли установить расширение для разметки x:Reference для привязки в коде?Как установить x: ссылку Расширение разметки программно?

Например:

{Binding SelectedItem, Source={x:Reference ComboList}}

Так я создать привязку, как это:

Binding b = new Binding("SelectedItem"); 
b.Source = //What to put here?? 

Я был ранее с помощью ElementName, но у меня были некоторые проблемы с NameScope, как указано в this question, потому что это привязка устанавливается в ComboBox, который находится внутри созданного UserControl, и, судя по всему, если я использую ElementName, то это ограничение ограничено только этим UserControl, а не внешним ..

Спасибо!

+0

Почему вы создаете привязку в коде, чтобы начать? Опубликуйте снимок экрана о том, что вам нужно. –

+0

Потому что я создаю конструктор форм WPF, где пользователь перетаскивает элементы управления на поверхность дизайна и устанавливает привязки через окно свойств. Я использую информацию привязки в окне свойств, чтобы программно установить эти привязки. –

+0

'{x: Reference}' - это конструкция XAML, она недоступна в коде C#. –

ответ

3

Преобразование мои комментарии в ответ:

{х: Reference} является XAML конструкт, он не доступен в C код

# Если вам нужно что-то внутри UserControl, чтобы иметь свойство извне, вы должны создать это свойство как DependencyProperty в пределах самого UserControl, затем привяжите свой элемент к этому свойству через RelativeSource:

В U serControl код позади:

public static readonly DependencyProperty SomeProperty = DependencyProperty.Register("Some", typeof (SomeValue), typeof (YourUserControl), new PropertyMetadata(default(SomeValue))); 

     public SomeValue Some 
     { 
      get { return (SomeValue) GetValue(SomeProperty); } 
      set { SetValue(SomeProperty, value); } 
     } 

Где-то в визуальном дереве UserControl:

<TextBox Text="{Binding Some, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/> 
Смежные вопросы