Как создать привязку данных к двум файлам xaml? - PullRequest
1 голос
/ 14 мая 2010

Я пытаюсь прийти к рабочему пониманию того, как работает привязка данных, но даже после нескольких уроков у меня есть только базовое понимание того, как работает привязка данных. Таким образом, этот вопрос может показаться фундаментальным для тех, кто более знаком с silverlight. Даже если это тривиально, пожалуйста, укажите мне на какой-нибудь учебник, посвященный этой проблеме. Все, что я смог найти, просто решило эту проблему, добавив привязку данных в родительский page.xaml (который я не должен использовать в моем случае).

Для примера рассмотрим, что у нас есть 5 файлов:

starter.cs
button1.xaml + codeBehind
button2.xaml + codeBehind

Две кнопки генерируются в коде в начальном (.cs) файле, а затем добавляются в некоторый MapLayer

button1 my_button1 = new button1();   
button2 my_button1 = new button2();

someLayer.Children.Add(my_button1);
someLayer.Children.Add(my_button2);     

Моя цель - соединить две кнопки, чтобы они всегда отображали один и тот же «текст» (т.е. my_button1.content == my_button2.content = true;). Таким образом, когда что-то изменяется my_button1.content, это изменение следует распространить на другую кнопку (двухстороннее связывание).

На данный момент мой button1.xaml выглядит так:

<Grid x:Name="LayoutRoot">
<Button x:Name="x_button1" Margin="0,0,0,0" Content="{Binding ElementName=x_button2, Path=Content}" ClickMode="Press" Click="button1_Click"/>
</Grid>

Но все, что я извлекаю из этого, - это кнопка без содержимого вообще, она просто пуста, поскольку привязка молча терпит неудачу. Как я могу создать привязку данных в контексте, который я описал? Желательно в коде, а не в XAML;)

Заранее спасибо

1 Ответ

0 голосов
/ 14 мая 2010

Блок документации, который вам нужно прочитать, таков: XAML Namescopes

Ваш button1 xaml имеет привязку, ищущую элемент с именем "x_button2". Однако в реальном приложении может быть много элементов управления, которые в свою очередь имеют вложенные элементы управления. Все эти элементы управления имеют всевозможные элементы пользовательского интерфейса, некоторые из которых могут иметь имена.

Было бы невозможно что-либо сделать, если бы все имена во всем приложении были уникальными. Однако это должно было бы быть правдой, если бы ваша кнопка1 могла выслеживать существование другого элемента управления где-то в визуальном дереве вне того, что оно фактически знает (свой собственный xaml).

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

Существуют различные решения этой проблемы в зависимости от ваших реальных требований, в отличие от упрощенной проблемы в вашем вопросе.

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

...