У меня есть вид дерева внутри моего списка, как показано ниже
<ListView x:Name="LvItemDisplay" ItemsSource="{Binding itemDisplayList}" SelectionChanged="LvItemDisplay_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate x:Name="dtItemDisplay">
<TreeView x:Name="TvItemDisplay" Background="Transparent" ItemsSource="{Binding itemDisplayList}" MouseDown="TvItemDisplay_MouseDown_1" SelectedItemChanged="TvItemDisplay_SelectedItemChanged" >
.
.
.
У меня есть событие клика как для просмотра дерева, так и для просмотра списка. и то и другое, при щелчке на нем появляется диалоговое окно, которое пользователь может редактировать и которое связывает их.
проблема в том, что всякий раз, когда пользователь хочет щелкнуть древовидное представление, пользователю сначала нужно нажать на просмотр списка, чтобы получить SelectedItem
. если нет, ничего не произойдет, поскольку SelectedItem
будет нулевым.
это код для списка
private void LvItemDisplay_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListViewItem listViewItem = (ListViewItem)(LvItemDisplay.ItemContainerGenerator.ContainerFromItem(LvItemDisplay.SelectedItem));
TreeView treeView = null;
DialogHost dialogHost = null;
if (LvItemDisplay.SelectedIndex != -1)
{
if (listViewItem != null)
{
//get the listViewItem's template parent
ContentPresenter templateParent = GetFrameworkElementByName<ContentPresenter>(listViewItem);
//get the DataTemplate that treeview in.
DataTemplate dataTemplate = LvItemDisplay.ItemTemplate;
if (dataTemplate != null && templateParent != null)
{
treeView = dataTemplate.FindName("TvItemDisplay", templateParent) as TreeView;
if (treeView != null)
{
dialogHost = dataTemplate.FindName("dialogBoxEditQty", templateParent) as DialogHost;
dialogHost.IsOpen = true;
}
}
}
}
}
и для дерева
private void TvItemDisplay_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
ListViewItem listViewItem = (ListViewItem)(LvItemDisplay.ItemContainerGenerator.ContainerFromItem(LvItemDisplay.SelectedItem));
TreeView treeView = null;
DialogHost dialogHost = null;
if (listViewItem != null)
{
//get the listViewItem's template parent
ContentPresenter templateParent = GetFrameworkElementByName<ContentPresenter>(listViewItem);
//get the DataTemplate that treeview in.
DataTemplate dataTemplate = LvItemDisplay.ItemTemplate;
if (dataTemplate != null && templateParent != null)
{
treeView = dataTemplate.FindName("TvItemDisplay", templateParent) as TreeView;
}
if (treeView != null)
{
dialogHost = dataTemplate.FindName("dialogBoxEditQty", templateParent) as DialogHost;
dialogHost.IsOpen = true;
}
}
}
save
для dialogHost
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
try
{
// get the current selected item
ListViewItem listViewItem = (ListViewItem)(LvItemDisplay.ItemContainerGenerator.ContainerFromItem(LvItemDisplay.SelectedItem));
DialogHost dialogHost = null;
if (listViewItem != null)
{
.
.
.
Я хочу что-то вроде того, чтобы каждый раз, когда пользователь нажимал на древовидную структуру, он вызывал список позади или щелкал на виде списка. это возможно?