Je regarde ce logiciel MVVM et je suis confronté à un problème.ICommand dans MVVM WPF
La situation est plutôt simple.
Je le code suivant dans ma page index.xaml
<Grid>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:MovieView ></view:MovieView>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
et dans mes index.xaml.cs
...
InitializeComponent(); base.DataContext = nouveau MovieViewModel (ent.Movies.ToList()); ....
et voici mon MoveViewModel
public class MovieViewModel
{
readonly List<Movies> _m;
public ICommand TestCommand { get; set; }
public MovieViewModel(List<Movies> m)
{
this.TestCommand = new TestCommand(this);
_m = m;
}
public List<Movies> lm
{
get
{
return _m;
}
}
}
enfin
ici est mon contrôle XAML MovieView
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label VerticalAlignment="Center" Grid.Row="0" Grid.Column="0">Title :</Label><TextBlock VerticalAlignment="Center" Grid.Row="0" Grid.Column="1" Text="{Binding Title}"></TextBlock>
<Label VerticalAlignment="Center" Grid.Row="1" Grid.Column="0">Director :</Label><TextBlock VerticalAlignment="Center" Grid.Row="1" Grid.Column="1" Text="{Binding Director}"></TextBlock>
<Button Grid.Row="2" Height="20" Command="{Binding Path=TestCommand}" Content="Edit" Margin="0,4,5,4" VerticalAlignment="Stretch" FontSize="10"/>
</Grid>
Le problème que j'ai est que si je mets ItemsSource à la reliure
il ne fait rien
si je mets ItemsSource = "{Binding lm}"
il Remplit mon ItemsControl mais la commande (Commande = "{Binding Path = TestCommand}") ne ne fonctionne pas.
Bien sûr, cela ne fonctionne pas car TestCommand n'appartient pas à mon objet d'entité Movies.
Donc finalement ma question est,
que dois-je passer à ItemsControl pour faire fonctionner?
Thx à l'avance
Voir la réponse d'Arcturus: dans le modèle d'élément, votre DataContext est remplacé par l'élément spécifique affiché. La commande que vous voulez lier est sur le contexte de données de la vue parent (votre modèle de vue), pas le contexte de données de l'élément (qui est une instance unique de 'Movie') –
En outre, DataContext =" {Binding} " est reduntant: vous liez 'DataContext' à l'ensemble du contexte de données actuel, ce qui est déjà le cas :) –