J'ai un UserControl "SubjectListView". La liaison est définie sur "AllSubjects", qui est une ObservableCollection à l'intérieur de SubjectListViewModel. Il est utilisé pour récupérer le nom et exécuter la commande. Le nom est extrait, mais la commande qui figure également dans SubjectListViewModel n'est pas exécutée sur le bouton mais fonctionne sur le bouton qui n'est pas créé de manière dynamique en dehors de la portée.
Y a-t-il une solution?
<StackPanel>
<ItemsControl ItemsSource="{Binding AllSubjects}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Width="100" Content="{Binding Name}" <!-- Is working-->
Command="{Binding InvasionCommand}" <!--Is NOT working--> />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button Content="Check for Invasion" Width="120" Command="{Binding InvasionCommand}" <!-- Is working-->/>
</StackPanel>
Réponses:
2 pour la réponse № 1Le problème est que InvasionCommand
est dans votre viewmodel (je pense que oui), mais vous êtes dans l’élément réel de votre ItemsSource ..
Pour cela, j'utilise ElementSpy
, mais je pense que cela fonctionnera si vous utilisez un RelativeSource ..
Ici vous avez un aperçu de toutes les liaisons possibles: http://www.nbdtech.com/Free/WpfBinding.pdf
Ou, si vous donnez le nom à votre StackPanel Container
, vous pouvez lier les éléments suivants:
Binding ElementName=Container, Path=DataContext