Я смотрю на этот материал MVVM, и я столкнулся с проблемой.ICommand в MVVM WPF
Ситуация довольно проста.
У меня есть следующий код в моем index.xaml странице
<Grid>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:MovieView ></view:MovieView>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
и в моем index.xaml.cs
...
InitializeComponent(); base.DataContext = новый MovieViewModel (ent.Movies.ToList()); ....
и вот мой 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;
}
}
}
наконец
вот мой контроль 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>
Так проблема у меня в том, что если я устанавливаю ItemsSource при привязке
это не делает ничего
если я устанавливаю ItemsSource = "{Binding} лм"
заселяет мой ItemsControl но команда (Command = "{Binding Path = TestCommand}") не не работа.
Конечно, это не сработает, потому что TestCommand не принадлежит моему объекту Object Movies.
Итак, наконец, мой вопрос,
, что мне нужно сделать, чтобы перейти к ItemsControl, чтобы сделать его работу?
Thx заранее
См. Ответ @ Arcturus: в шаблоне элемента ваш DataContext изменяется на конкретный отображаемый элемент. Команда, которую вы хотите связать, находится в контексте данных родительского представления (ваша модель представления), а не контексте данных элемента (который является единственным экземпляром 'Movie') –
Кроме того, DataContext =" {Binding} " redundant: вы привязываете 'DataContext' ко всему текущему контексту данных, который он уже есть :) –