Ich schaue mir dieses MVVM-Zeug an und ich stehe vor einem Problem.ICommand in MVVM WPF
Die Situation ist ziemlich einfach.
Ich habe den folgenden Code in meiner index.xaml Seite
<Grid>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:MovieView ></view:MovieView>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
und in meinem index.xaml.cs
...
InitializeComponent(); base.DataContext = neues MovieViewModel (ent.Movies.ToList()); ....
und hier ist mein 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;
}
}
}
schließlich
hier meine Kontrolle XAML Movieview
ist<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>
Also ich habe das Problem ist, dass wenn ich gesetzt Itemssource bei Bindung
es nicht alles
machen, wenn ich Itemssource = "{Binding lm}"
es auffüllt meine Items aber der Befehlssatz (Command = "{Binding Path = TestCommand}") nicht der Fall ist nicht arbeiten.
Natürlich funktioniert es nicht, da TestCommand nicht zu meinem Objekt Objekt Filme gehört.
So endlich ist meine Frage,
was muss ich Itemscontrol übergeben, um es Arbeit zu machen?
Thx im Voraus
Siehe Antwort von @ Arcturus: In der Elementvorlage wird Ihr DataContext in das spezifische Element geändert, das angezeigt wird. Der Befehl, an den Sie binden möchten, befindet sich im Datenkontext der übergeordneten Ansicht (Ihr Anzeigemodell), nicht im Datenkontext des Elements (eine einzelne Instanz von 'Movie'). –
Auch DataContext =" {Binding} " ist redundant: Sie binden 'DataContext' an den gesamten aktuellen Datenkontext, was es bereits ist :) –