J'essaie de changer dynamiquement le DataContext
pour mon application lorsque la sélection d'un élément Pivot
change. Tout fonctionne comme je le veux, mais je continue d'obtenir des erreurs dans la fenêtre de sortie du débogueur sur les sources de données qui ne sont pas trouvées dans les ListBox présents dans les éléments PivotItems qui ne sont pas actuellement sélectionnés PivotItem
. Par exemple, disons que j'ai 2 PivotItems - PivotItem1 et PivotItem2 - affichant chacun un ListBox chacun - ListBox1 et ListBox2. Maintenant, lorsque PivotItem1 est actif et affiche ListBox1, ListBox2 se plaint que sa source de données n'a pas été trouvée, ce qui est correct car le DataContext
actuel ne contient pas la collection à laquelle il est lié. Ceci est l'erreur (je l'ai ajouté des sauts de ligne supplémentaire):Erreur lors de la mise à jour DataContext pour Windows Phone 7 Pivot
System.Windows.Data Error: BindingExpression path error:
'Entries' property not found on 'MyApp.ViewModels.CategoriesView'
'MyApp.ViewModels.CategoriesView' (HashCode=79283607).
BindingExpression: Path='Entries'
DataItem='MyApp.ViewModels.CategoriesView'
(HashCode=79283607); target element is
'System.Windows.Controls.ListBox' (Name='ListBox2');
target property is 'ItemsSource' (type 'System.Collections.IEnumerable')..
De même, lorsque PivotItem2 est actif, ListBox1 génère une erreur. Je suis mise à jour le DataContext
dans l'événement LoadingPivotItem
du Pivot, j'ai également essayé de le faire dans l'événement LoadedPivotItem
mais obtiens la même erreur.
Les deux collections implémentent INotifyPropertyChanged
, et comme je l'ai mentionné au début, tout fonctionne, malgré l'erreur. Je voudrais supprimer l'erreur en quelque sorte.
Voici le XAML pour un des ListBoxes:
<ListBox x:Name="ListBox1"
Margin="0,0,-12,0"
ItemsSource="{Binding Categories}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17"
Width="432">
<TextBlock Text="{Binding CategoryName}"
TextWrapping="Wrap"
Margin="12,0,0,0"
Style="{StaticResource PhoneTextExtraLargeStyle}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
L'autre est identique, à l'exception « Catégories » est remplacé par « Entrées » et « CategoryName » par « NomEntrée ».
Merci d'avance pour votre aide.
C'est une bonne idée. Je suis curieux de savoir s'il s'agit d'un comportement connu, à savoir que l'on tente de charger des liaisons d'éléments d'interface utilisateur actuellement inactifs? – Praetorian
@Praetorian Je m'attendrais à ce que toutes les liaisons soient évaluées en même temps en vue de trouver des problèmes (en soulevant des erreurs de liaison) dès que possible. Il n'est pas prudent de supposer que les liaisons seront mises à jour lorsque l'interface utilisateur changera. Il est beaucoup plus commun (attendu?) Pour un datacontext d'être défini une fois, puis les modifications sont traitées dans le viewmodel. –