【发布时间】:2019-09-23 15:57:44
【问题描述】:
我的列表视图中有树视图,如下所示
<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)
{
.
.
.
我想要这样的东西,每当用户单击树视图时,它也会触发 /click 列表视图后面的列表视图。有可能吗?
【问题讨论】:
标签: c# wpf listview treeview datatemplate