В настоящее время у меня есть древовидная структура, которая отображает данные с использованием иерархической таблицы данных, и когда пользователь нажимает кнопку «Удалить», он удаляет выбранные узлы.Это работает как задумано.
Однако вместо того, чтобы пользователь нажимал кнопку, я пытаюсь выполнить команду, щелкнув правой кнопкой мыши узел и выбрав соответствующий пункт меню.
Этооказывается гораздо сложнее, потому что он выбирается ViewModel узла (который ничего не знает о View) вместо соответствующего ViewModel View.
Есть ли способ передать элемент управлениявместо этого к ViewModel представления?
Вот код для кнопки удаления:
View:
<Button Content="Remove" Grid.Row="2" Height="23" VerticalAlignment="Top" Name="removeButton"
Width="75" Margin="5,20,5,0" Command="{Binding Path=RemoveCommand}" />
ViewModel:
public RelayCommand RemoveCommand
{
get
{
if (_removeCommand == null)
{
_removeCommand = new RelayCommand(
() => this.Remove()
);
}
return _removeCommand;
}
}
public void Remove()
{
_organLocationTree2.RemoveOrganLocations(ProjectOrganLocationView.GetExtendedTreeView().SelectedItems);
ProjectOrganLocationView.GetExtendedTreeView().SelectedItems.Clear();
base.RaisePropertyChanged("DestOrganTree");
}
И XAML для пункта меню:
<local:ExtendedTreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubOrganLocations}">
<TextBlock Text="{Binding OrganName}" >
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header ="Add SubNode" Command="{Binding Path=MenuItem_Add}"></MenuItem>
<MenuItem Header ="Remove Node" Command="{Binding Path=RemoveCommand}"></MenuItem>
<MenuItem Header ="Edit Node" Command="{Binding Path=ProjMenuItem_Edit}"
CommandParameter="{Binding DestOrganTree, Path=Selected.OrganName}"></MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
</local:ExtendedTreeView.ItemTemplate>
</local:ExtendedTreeView>
Я попытался реализовать команду удаления в ViewModel узла, но, поскольку он ничего не знает о View, он очень быстро запутался.