Каков наилучший подход для создания привязки во время выполнения? - PullRequest
0 голосов
/ 04 ноября 2010

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

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

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

Так что мне интересно, как лучше всего достичь этого?

Ответы [ 2 ]

3 голосов
/ 04 ноября 2010

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

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

1 голос
/ 04 ноября 2010

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

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

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

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

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

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

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

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

...