WPF TreeView refreshing WPF TreeView refreshing xml xml

WPF TreeView refreshing


After many hours finally found a solution!

private void RefreshViews(){    XmlEditor.Clear();    XmlEditor.Text = IndentXml();    UnselectSelectedItem();    XmlTree.Items.Refresh();    XmlTree.UpdateLayout();}private void UnselectSelectedItem(){    if (XmlTree.SelectedItem != null)    {        var container = FindTreeViewSelectedItemContainer(XmlTree, XmlTree.SelectedItem);        if (container != null)        {            container.IsSelected = false;        }    }}private static TreeViewItem FindTreeViewSelectedItemContainer(ItemsControl root, object selection){    var item = root.ItemContainerGenerator.ContainerFromItem(selection) as TreeViewItem;    if (item == null)    {        foreach (var subItem in root.Items)        {            item = FindTreeViewSelectedItemContainer((TreeViewItem)root.ItemContainerGenerator.ContainerFromItem(subItem), selection);            if (item != null)            {                break;            }        }    }    return item;}


For some reason nothing under the sun worked for me and all I needed was to refresh an image on my tree if that item was changed. so I did something ridiculous but worked great.First I added a Loaded event to my image and I set the Tag as the unique id of the record from the database

Tag="{Binding ObjectId}" Loaded="imgCheckComment_Loaded"

in the codebehind on that loaded event I built a list of every image

private List<Image> commentColors = new List<Image>();    private void imgCheckComment_Loaded(object sender, RoutedEventArgs e)    {        var si = sender as Image;        if (si != null)            commentColors.Add(si);    }

then any time I made a change to anything I updated the Image property of Item (Item is the custom class I bound to my tree) I brute force updated the object

    public void RefreshContext(Item selectedItem)    {        commentColors.ForEach(si => {             if (selectedItem.ObjectId == Convert.ToInt32(si.Tag))            {                si.Source = new BitmapImage(new Uri(selectedItem.Image, UriKind.Relative));                return;            }        });    }