2010-08-05 1 views
0

Основная проблема: Как связать текстовое поле с выбранным элементом combobox, который является источником данных, является результатом запроса LINQ в контексте домена службы WCF RIA.Проблема с связыванием SL4 с услугами WCF RIA

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

Мое решение до сих пор:

После того как пользователь нажмет, чтобы создать новый элемент, новые элементы создаются и добавляются в объект набора, но еще не сохранены (по одному для каждого языка). После этого этот код запускается. Предполагается, что поле со списком позволяет пользователю выбирать один из созданных элементов, который отображается как соответствующий язык. Связанные текстовые поля должны позволять пользователю редактировать элемент.

код позади:

//Setup the combobox 
LanguageComboBox.ItemsSource = dc.GeneralStatistics.Where(g => g.RelatedResourceId.Equals(guid)); 
LanguageComboBox.DisplayMemberPath = "Language.LanguageName"; 
LanguageComboBox.SelectedItem = dc.GeneralStatistics.First(g => g.Language.LanguageName.Equals("English")); 

//Setup the textboxes 
this.StatisticsText.DataContext = (LanguageComboBox.SelectedItem as GeneralStatistics).Text; 
this.ShortDescriptionText.DataContext = (LanguageComboBox.SelectedItem as GeneralStatistics).ShortDescription; 

XAML КОД:

<ComboBox x:Name="LanguageComboBox" /> 
<TextBox x:Name="ShortDescriptionText" Text="{Binding}" /> 
<TextBox x:Name="StatisticsText" Text="{Binding}" /> 

Проблема с моим решением:

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

+0

Попробуйте связывании DataContexts вместо того, чтобы устанавливать их один раз. Что-то вроде DataContext = "{Binding SelectedItem, ElementName = LanguageComboBox}". –

+0

Я так невероятно рад, что ваше предложение сработало! Теперь сделайте ответ из этого, чтобы я мог отметить его: P СПАСИБО ГАЗИЛОННЫЙ БАРЗИОННЫЙ МИЛЛИОН! Там просто нет ничего похожего на облегчение, которое вы чувствуете, когда часть кода только начинает работать так, как вы ожидаете, после того, как он борется часами/днями на нем. – cmaduro

ответ

1

Вы можете упростить код, выполнив следующие действия.

код позади:

LanguageComboBox.DataContext = dc.GeneralStatistics.Where(g => g.RelatedResourceId.Equals(guid)); 

XAML:

<ComboBox x:Name="LanguageComboBox" /> 
<TextBox x:Name="ShortDescriptionText" Text="{Binding ElementName=LanguageComboBox, Path=SelectedItem.ShortDescription}" /> 
<TextBox x:Name="StatisticsText" Text="{Binding ElementName=LanguageComboBox, Path=SelectedItem.LongDescription}" /> 

 Смежные вопросы

  • Нет связанных вопросов^_^