2010-11-04 2 views
0

В моем приложении я хочу создать привязку во время выполнения, и каждый объект должен иметь отдельную привязку.Каков наилучший подход для создания привязки во время выполнения?

Например: у меня есть две копии UserControl, и каждая копия имеет свойство Text, и она должна быть привязана к другому источнику данных.

И поскольку свойство Dependency является статическим, оно не позволит иметь DP для каждого экземпляра, только один для каждого класса.

Так что я задаюсь вопросом, что лучше всего подходит для его достижения?

+0

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

+0

Пользователь сам должен создавать привязки между пользовательским интерфейсом и источником данных. Во время создания приложения я не знаю, какой именно DP потребуется и какой объект привязан к тому источнику данных. Поэтому мне нужно было создать их динамически. – Vitalij

ответ

3

Для динамической работы с привязкой данных проверьте статический класс BindingOperations.

Что касается использования DP, я не уверен, что вы просите. Сам DP является статическим, но значение DP ассоциируется в каждом экземпляре. В противном случае, как несколько экземпляров TextBox могут иметь разные значения Text? Связывания специфичны для каждого экземпляра.

+0

Вы правы. Извините, я имел в виду немного другую вещь. Я имел в виду, как мне создать не существующий DP и назначить их на экземпляр объекта? – Vitalij

1

Существуют два разных источника данных разных типов? Или это два разных экземпляра одного типа?

Я спрашиваю, потому что решение, которое вы запрашиваете - создание привязки во время выполнения, может быть излишне сложным. Обычно вам не нужно создавать привязки во время выполнения, чтобы решить описанную проблему. Из того, что вы сказали до сих пор о проблеме, похоже, что гораздо более простое решение должно работать.

Общепринято иметь несколько экземпляров определенного пользовательского элемента управления и для каждого экземпляра привязываться к другому исходному объекту. Вы можете сделать это с помощью обычных выражений привязки данных в Xaml. Хитрость заключается в том, чтобы полагаться на DataContext, чтобы определить, какой конкретный пользовательский элемент управления использует в качестве своего источника. Например:

<my:MyUserControl DataContext="{Binding Path=Source1}" /> 
<my:MyUserControl DataContext="{Binding Path=Source2}" /> 

Это будет создавать два экземпляра пользовательского элемента управления пользователя, MyUserControl и любые привязки в первой присоединит к тому, что объект был в Source1, в то время как второй будет использовать source2. Так что, если MyUserControl.xaml содержит что-то вроде этого:

<TextBlock Text="{Binding Path=Name}" /> 

то, что связывается с именем свойства двух различных исходных объектов в двух различных случаях управления пользователем.

В этом заявлении указано, что каждый пользовательский элемент управления «должен быть привязан к другому источнику данных».

+0

В моем случае я задаю путь привязки, используя интерфейс перетаскивания, затем я программно извлекаю привязку и переназначаю пользовательский элемент управления. – Vitalij