Связывание команд в UserControl используется как ListBox.ItemTemplate

У меня есть Listbox с UserControl как DataTemplate, это UserControl имеет Button удалить этот элемент из списка.

<ListBox x:Name="FileList" ItemsSource="{Binding Files}" >  
   <ListBox.ItemTemplate>
      <DataTemplate>
         <Views:FileItem/>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

ItemsSource определяется как:

ObservableCollection<FileViewModel> m_fileViews = new ObservableCollection<FileViewModel>();

Здесь UserControl упрощена:

<UserControl x:Class="Views.FileItem">
   <Canvas x:Name="LayoutRoot">
      <TextBlock x:Name="FileName" Text="{Binding FileName}" />
      <Button Content="Remove"/>
   </Canvas>
</UserControl>

Когда пользователь нажимает Remove кнопку, он должен удалить этот элемент из ObservableCollection,

Проблема в том, DataContext для каждого ListBoxItem это другая ViewModel, чем ViewModel, которая содержит ObservableCollection,

Я не уверен, как связать Remove кнопка к ICommand в "родительском" ViewModel. Любая помощь будет оценена. Спасибо.

1 ответ

Решение

Я бы привязал кнопку к ICommand в ViewModel UserControl, а затем отправил бы сообщение родительскому ViewModel, используя слабо связанные сообщения (доступно в большинстве сред Mvvm, таких как MvvmFoundation)

Позвольте родительской виртуальной машине зарегистрироваться для сообщения "удалите меня" и соответственно обновите ObservableCollection...

Надеюсь это поможет:)

Другие вопросы по тегам