private void UiFile_ItemRemoved(UiItem item, UiItem parentItem)
        {
            //Remove view
            UiItemView itemView = dataToViewDict[item];

            UiTreeView.NotifyItemRemoved(itemView);
            itemView.DetachParent();
            dataToViewDict.Remove(item);
        }
        private void UiTreeView_ItemMoved(ITreeItem itemView, ITreeFolder oldParentView, ITreeFolder newParentView, int index)
        {
            //Data에 적용하기
            UiItem     item              = ((UiItemView)itemView).Data;
            UiItem     newParentItem     = ((UiItemView)newParentView).Data;
            UiItemView oldParentItemView = (oldParentView as UiItemView);

            if (oldParentItemView != null)
            {
                oldParentItemView.Data.RemoveChildItem(item);
            }
            newParentItem.InsertChildItem(index, item);

            ItemMoved?.Invoke(item, newParentItem, oldParentItemView.Data);
        }
        private void UiFile_ItemCreated(UiItem item, UiItem parentItem)
        {
            UiItemView itemView = new UiItemView(item);

            if (parentItem == null)
            {
                //Create root
                itemView.SetRootItem();
                RootItemView = itemView;

                UiTreeView.ChildItemCollection.Add(itemView);
                UiTreeView.ManualRootFolder = itemView;
            }
            else
            {
                itemView.ParentItem = dataToViewDict[parentItem];
            }
            //Add to collection
            dataToViewDict.Add(item, itemView);

            //Register events
            item.ChildInserted += Data_ChildInserted;
            item.ChildRemoved  += Data_ChildRemoved;

            void Data_ChildInserted(int index, UiItem childItem)
            {
                UiItemView childItemView = dataToViewDict[childItem];

                itemView.ChildItemCollection.Insert(index, childItemView);
            }

            void Data_ChildRemoved(UiItem childItem, UiItem currentItem)
            {
                UiItemView childItemView = dataToViewDict[childItem];

                itemView.ChildItemCollection.Remove(childItemView);
            }
        }