在treeview每次添加或者删除节点时,重新指定数据源时再指定回原先选择的项
treeView.ItemsSource = m_DataSource; //这里的m_DataSource是你treeView的数据源
foreach (var item in treeView.Items)
{
var tvi = treeView.ItemContainerGenerator.ContainerFromItem(item);
if (tvi == null)
continue;
SetSelect((TreeViewItem)tvi, lastSelectItem); //这里的lastSelectItem是你刷新前最后选中的项
}
private void SetSelect(TreeViewItem tvi, Model data) //这里的Model是你的treeview对应的模型
{
if (tvi.Items.Count > 0)
{
foreach (var item in tvi.Items)
{
tvi.UpdateLayout(); //一定要加这句,否则下一句获得的tviChild 会为null
var tviChild = tvi.ItemContainerGenerator.ContainerFromItem(item);
if (tviChild == null)
continue;
var model = (Model)item;
if (data.ID == model.ID) //使用模型中的一个属性数据进行匹配,该节点是否为选中
{
((TreeViewItem)tviChild).IsSelected = true;
return;
}
else
{
SetSelect((TreeViewItem)tviChild, data);
}
}
}
}
参考:https://www.cnblogs.com/xy2017/p/8901020.html
https://blog.csdn.net/u013002790/article/details/78210551