[英]Treeview.Items.Clear() method return null exception (e.NewValue==null) in SelectedItemChanged Event
I am from Iran and I cant speak English very well, sorry.我来自伊朗,我的英语说得不好,抱歉。 I made something like
OpenFileDialog
in WinForms and work correctly.我在 WinForms 中制作了类似
OpenFileDialog
东西并且工作正常。 After, for better user interface, I tried to make it in WPF.之后,为了更好的用户界面,我尝试在 WPF 中制作它。 I use
TreeView
and other controls for it in both platforms (Winforms and WPF) in Winforms I could do this correctly usingbelow code:我在 Winforms 的两个平台(Winforms 和 WPF)中都使用了
TreeView
和其他控件,我可以使用以下代码正确执行此操作:
private void Folder_FileTreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
Folder_FileTreeView.Nodes.Clear();//this is necessary to clean first page node, after get new folders
if(e.Node.Text=="Desktop")//also this code is necessary to compare node
{
//Do something
}
}
Also in WPF I can get text of Item by below code:
同样在 WPF 中,我可以通过以下代码获取 Item 的文本:
private void Folder_FileTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (e.NewValue!=null)
{
StackPanel CustomStackPanel = (StackPanel)((TreeViewItem)e.NewValue).Header;
TextBlock textBlock = (TextBlock)CustomStackPanel.Children[1];
nodetext = textBlock.Text;//this line return text of item for compare
}
Folder_FileTreeView.Items.Clear();
}
If I don't use
Folder_FileTreeView.Items.Clear()
the above code return folders without clearing first page, but if I do use Folder_FileTreeView.Items.Clear()
e.NewValue
returns null
.如果我不使用
Folder_FileTreeView.Items.Clear()
上面的代码返回文件夹而不清除第一页,但如果我使用Folder_FileTreeView.Items.Clear()
e.NewValue
返回null
。 Please help me to use together these codes: Folder_FileTreeView.Items.Clear();(or clear first page) and get text of selecteditem by user without return null请帮我一起使用这些代码: Folder_FileTreeView.Items.Clear();(或清除第一页)并由用户获取所选项目的文本而不返回空
Thanks A lot多谢
e.NewItem
will be null
if the TreeView
used to have an item selected but now does not. e.NewItem
如果TreeView
曾经选择了一个项目,但现在没有选择, e.NewItem
null
。 When you clear the items, you are removing any selection, this of course changes the selection and raises the SelectedItemChanged
event with null
as the new selection- since there are no possible items that could be selected.当你清除的项目,要删除的任何选择,这当然改变了选择和引发
SelectedItemChanged
与事件null
作为新的选择-因为有可能被选中任何可能的项目。
If you want to replace the items in the list with new items after the user makes a selection, the selected item will be null
while that change is happening.如果您想在用户进行选择后用新项目替换列表中的项目,则在发生更改时所选项目将为
null
。 You need to do the following:您需要执行以下操作:
SelectedItemChanged
event and remember the new selected item in a variable .SelectedItemChanged
事件并记住变量中的新选定项。 For example, if they click on the item for "Desktop" set a variable (eg Path
) to the path for the user's desktop (eg C:\\Users\\UserName\\Desktop).Path
)设置为用户桌面的路径(例如 C:\\Users\\UserName\\Desktop)。TreeView
.TreeView
中的文件夹列表。 This will trigger SelectedItemChanged
again, but you want to ignore it this time because e.NewItem == null
.SelectedItemChanged
,但这次您想忽略它,因为e.NewItem == null
。Path
and make new items for each of those folders.Path
所有文件夹并为每个文件夹创建新项目。The way was found by below code方法是通过下面的代码找到的
private void Folder_FileTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
Folder_FileTreeView.SelectedItemChanged -= Folder_FileTreeView_SelectedItemChanged;
if (e.NewValue!=null)
{
StackPanel CustomStackPanel = (StackPanel)((TreeViewItem)e.NewValue).Header;
TextBlock textBlock = (TextBlock)CustomStackPanel.Children[1];
nodetext = textBlock.Text;//this line return text of item for compare
}
Folder_FileTreeView.Items.Clear();
Folder_FileTreeView.SelectedItemChanged += Folder_FileTreeView_SelectedItemChanged;
}
thank very much for every one helped me非常感谢每一位帮助我的人
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.