2010-10-07 6 views
1

Je suis un nouveau venu chez XAML, et ma première tâche dans un nouveau travail est de démêler une collection particulièrement malodorante de code spaghetti. Apprendre le XAML en même temps que de démêler ce spectacle d'horreur me dépasse un peu, alors je m'excuse pour les questions que je pose au sujet des devoirs, ces jours-ci.Pourquoi ce code ne lie pas SelectedItem à une propriété?

Quoi qu'il en soit, j'ai le code XAML suivant:

<UserControl.Resources> 
    <CollectionViewSource x:Key="XMLObjectGroups" Source="{Binding Path=XMLObjectList}">        
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="IsDateType"/> 
     </CollectionViewSource.GroupDescriptions> 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="IsDateType" Direction="Ascending"/> 
      <scm:SortDescription PropertyName="OrderNumber" Direction="Ascending"/> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
<UserControl.Resources> 
... 
    <ListView 
      DataContext="{StaticResource XMLObjectGroups}" 
      ItemContainerStyle="{StaticResource XMLItemStyle}" 
      ItemsSource="{Binding}" 
      SelectedItem="{Binding Path=SelectedOrder}"> 

Sur la deuxième ligne XMLObjectList est une propriété en lecture seule d'une classe ViewModel, un retour Collections.ObjectModel.ReadOnlyObservableCollection(Of MyOrder).

Sur la dernière ligne SelectedOrder est une propriété de la même classe ViewModel, qui permet de définir et d'obtenir un objet MyOrder.

J'ai confirmé que XMLObjectList est référencé correctement en renommant la propriété, en tapant la chaîne, les points d'arrêt, etc. XMLObjectList fait certainement référence à la propriété XMLObjectList de cette classe ViewModel particulière. Toutefois, la propriété SelectedOrder n'est jamais accessible au moment de l'exécution, ce qui signifie qu'elle n'est pas connectée correctement à SelectedItem de cette ListView. En ce qui concerne ma lecture du sujet, et en ce qui concerne les réponses à une question similaire hier, le code que j'ai devrait fonctionner, mais ce n'est pas le cas. Qu'est-ce que je fais de mal, ici?

Répondre

2

essayez de le changer à ce qui suit:

<ListView 
     ItemContainerStyle="{StaticResource XMLItemStyle}" 
     ItemsSource="{Binding Source={StaticResource XMLObjectGroups}}" 
     SelectedItem="{Binding Path=SelectedOrder}"> 
+0

brillant. Ça a marché! Pourriez-vous expliquer ce qui a fait la différence? – Frosty840

+0

Dans votre code d'origine, vous définissez le DataContext explicitement! Ensuite, lorsque vous liez l'élément SelectedItem, il essaie de se lier à la propriété SelectedOrder sur XMLObjectList (qui n'existe pas) – rudigrobler

Questions connexes