Problème de base: comment lier une zone de texte à l'élément sélectionné d'une liste déroulante dont la source d'éléments est le résultat d'une requête LINQ sur un contexte de domaine de services RIA WCF.Problème de liaison SL4 avec les services WCIA RIA
Autre exigence: Lorsque l'élément sélectionné est modifié, la liaison doit être mise à jour. Autre exigence: La reliure doit être bidirectionnelle.
Ma solution à ce jour:
Lorsque l'utilisateur clique pour créer un nouvel élément, de nouveaux éléments sont créés et ajoutés à l'objet défini mais pas encore persisté (un pour chaque langue). Après que ce code s'exécute. La liste déroulante est supposée permettre à l'utilisateur de sélectionner l'un des éléments créés, ce qui est affiché en tant que langue correspondante. Les zones de texte liées doivent permettre à l'utilisateur de modifier l'élément.
code derrière:
//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 CODE:
<ComboBox x:Name="LanguageComboBox" />
<TextBox x:Name="ShortDescriptionText" Text="{Binding}" />
<TextBox x:Name="StatisticsText" Text="{Binding}" />
Le problème avec ma solution:
Il ne fonctionne pas, parce que quand je change la sélection dans la liste déroulante des zones de texte Ne pas mettre à jour. Je pourrais implémenter le gestionnaire d'événement changé de sélection et mettre à jour manuellement les zones de texte, mais cela irait à l'encontre de l'objectif de lier les zones de texte. Quelle est la meilleure pratique ici?
Essayez liant les DataContexts au lieu de les mettre une fois. Quelque chose comme DataContext = "{Binding SelectedItem, ElementName = LanguageComboBox}". –
Je suis si incroyablement soulagé que votre suggestion a fonctionné! Maintenant, faites une réponse pour que je puisse vérifier: P REMERCIE UN GAZILLION DE MILLIONS DE BILLILLONS! Il n'y a rien comme le soulagement que vous ressentez quand un morceau de code commence à fonctionner comme vous le souhaitez après avoir lutté pendant des heures/jours. – cmaduro