hey. J'essaie de maintenir un modèle MVVM, mais je trébuche quelque part en essayant de lier une liste. La première fois que j'exécute l'application, j'ai défini ItemCatalog
(ObservableCollection) comme étant une certaine liste ObservableCollection. La zone de liste est vide, mais si j'essaye à nouveau cela fonctionne. Cependant, il existe un décalage entre la source de données et les données affichées. Par exemple,Liaison de liste déroulante - retardée d'une source
I charger l'application -> source réglée à X
-> Listbox est vide
I Source maintenant mis à Y
-> Listbox affiche X
Je mis la source à Z
-> affiche Listbox etc ..
Ceci, pour moi, implique que la liaison fonctionne, mais je ne peux pas comprendre pourquoi il est en retard d'un.
Mon XAML ressemble à ceci:
<ListBox ItemsSource="{Binding ItemCatalog}">
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<TextBlock Text="{Binding Ref}" TextWrapping="Wrap" Foreground="Black" />
<TextBlock Text="{Binding ItemName}" TextWrapping="Wrap" Margin="12,-6,12,0" Foreground="Black" />
</StackPanel>
</DataTemplate>
</ListBox>
Dans le ViewModel, la valeur de ItemCatalog
est basée sur le bouton que l'utilisateur a appuyé (X
, Y
, Z
), qui sont tous stockés dans une variable statique. Y a-t-il une raison pour laquelle il y a un délai, ou un moyen de forcer à rétablir la dernière valeur ItemCatalog
?
Si je supprime la liaison du code XAML et que la source de la liste est définie directement à partir du code-behind, cela fonctionne parfaitement. Cependant, je veux essayer et maintenir le codage XAML. Je suis nouveau à MVVM, donc je pourrais faire ça à l'envers. grâce
EDIT - code supplémentaire
Le code est modifié dans la méthode OnNavigatedTo
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (NavigationContext.QueryString["Category"].ToString() == "House")
{
_categoryType = Models.House;
}
if (NavigationContext.QueryString["Category"].ToString() == "Car")
{
_categoryType = Models.Car;
}
MyViewModel.LoadNewData(_categoryType);
base.OnNavigatedTo(e);
}
LoadNewData
méthode définit simplement la variable statique en fonction du paramètre passé. Essentiellement, je dois relier après le chargement de la page, via XAML.
C'est un bon coup dans le noir! : D J'ai déplacé la méthode NotifyPropertyChange et dans la vue, j'ai mis le DataContext dans l'événement 'PropertChanged' du ViewModel. Je pensais que le DataContext n'aurait besoin d'être défini qu'une fois, mais il semble que je devais le définir chaque fois que l'événement PropertyChange est levé. Merci! – XSL