Связывание команд в 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...
Надеюсь это поможет:)