Я вернулся к старому проекту и хотел обновить код.У меня была эта реализация, которая работала хорошо:
<ListView
Background="{StaticResource WindowBackgroundColorBrush}"
ItemsSource="{Binding ListOfProjects}"
SelectedItem="{Binding SelectedProject, Mode=TwoWay}">
</ListView>
Я решил переписать ее как набор кнопок по причине, поэтому я изменил выше:
<ItemsControl ItemsSource="{Binding ListOfProjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Style="{ StaticResource ProjectListButtonStyle}" Content="{Binding Name}"
Command="{Binding ElementName=ContainerContent, Path=DataContext.ProjectSelectedCommand}"
CommandParameter="{Binding ID}"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Я создалКоманда ProjectSelectedCommand
, которая была просто реализована как:
this.ProjectSelectedCommand = new RelayCommand(x => this.OnProjectsSelected((int)x));
public void OnProjectsSelected(int projectID)
{
this.SelectedProject = this.ListOfProjects.Where(x => x.ID == projectID).First();
}
Но в результате привязка не работает.У меня есть простой текстовый блок для отображения названия проекта:
<TextBlock Text="{Binding Path=SelectedProject.Name}"></TextBlock>
В первой реализации имя проекта изменяется, а во второй (с помощью кнопок и команды) это не происходит, когда я нажимаюкнопка проекта.Я вижу, что отладчик входит в команду, и в ViewModel я вижу изменение SelectedProject
, но представление не обновляет его.Кто-нибудь знает, что может быть проблема второй реализации?