2009-12-14 3 views
1

J'ai un Listbox avec un UserControl comme DataTemplate. Ce UserControl a un Button pour supprimer cet élément de la liste.Liaison de commandes dans UserControl utilisée comme ListBox.ItemTemplate

<ListBox x:Name="FileList" ItemsSource="{Binding Files}" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <Views:FileItem/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Le ItemsSource est défini comme:

ObservableCollection<FileViewModel> m_fileViews = new ObservableCollection<FileViewModel>(); 

Voici le UserControl simplifié:

<UserControl x:Class="Views.FileItem"> 
    <Canvas x:Name="LayoutRoot"> 
     <TextBlock x:Name="FileName" Text="{Binding FileName}" /> 
     <Button Content="Remove"/> 
    </Canvas> 
</UserControl> 

Lorsque l'utilisateur clique sur le bouton Remove, il doit retirer ce point de l'ObservableCollection.

Le problème est que le DataContext pour chaque ListBoxItem est un ViewModel différent du ViewModel qui contient le ObservableCollection.

Je ne sais pas comment lier le bouton Remove à un ICommand dans le ViewModel "parent". Toute aide serait appréciée. Merci beaucoup.

Répondre

2

Je lie le bouton à un ICommand dans ViewModel du UserControl, puis envoyer un message au parent ViewModel en utilisant la messagerie à couplage lâche (dans la plupart des cadres MVVM, comme MvvmFoundation)

Laissez le registre VM parent pour le message "remove me", et mettre à jour le ObservableCollection en conséquence ...

Espérons que cela aide :)

+1

Merci. Cela a beaucoup aidé. Je m'inquiétais d'un ou deux autres scénarios auxquels je devais faire face en cours de développement, et le modèle Mediator les a tous résolus. – mfanto

Questions connexes