Привет, у меня есть TreeView, заполненный иерархической таблицей данных
<TreeView Name="DokumentBrowser" ItemTemplate="{StaticResource HierachrTree}"
<HierarchicalDataTemplate x:Key="HierachrTree"
DataType="{x:Type src:Ordner}"
ItemsSource="{Binding UnterOrdner}">
<TextBlock Text="{Binding OrdnerName}"/>
</HierarchicalDataTemplate>
Класс, который используется для получения объектов, выглядит так
#region OrdnerClass
public class OrdnerListe : ObservableCollection<Ordner>
{
protected override void InsertItem(int index, Ordner item)
{
base.InsertItem(index, item);
this[index].PropertyChanged += new PropertyChangedEventHandler(OrdnerListe_PropertyChanged);
}
void OrdnerListe_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
OnCollectionChanged(new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Reset));
}
}
public class Ordner : INotifyPropertyChanged
{
#region fields
private string _name, _path; //Ordnername
private Ordner _pordner; //Parent Ordner Objekt
private OrdnerListe _uordner; //Liste aus Ordner Objekten
private File_Liste _filename; // Liste der Dateien die in einem Ordner Liegen
#endregion
#region INotifyPropertyMember
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this,new PropertyChangedEventArgs(info));
}
}
#endregion
#region konstruktor
public Ordner()
{
_uordner = new OrdnerListe();
_filename = new File_Liste();
}
#endregion
#region properties
public string OrdnerName
{
get { return _name; }
set
{
if (value != this._name)
{
this._name = value;
NotifyPropertyChanged("OrdnerName");
}
}
}
public string OrdnerPfad
{
get { return _path; }
set
{
if (value != this._path)
{
this._path = value;
NotifyPropertyChanged("OrdnerPfad");
}
}
}
public Ordner ParentDir
{
get { return _pordner; }
set
{
if (value != this._pordner)
{
this._pordner = value;
NotifyPropertyChanged("ParentDir");
}
}
}
public OrdnerListe UnterOrdner
{
get { return _uordner; }
set
{
if (value != this._uordner)
{
this._uordner = value;
NotifyPropertyChanged("UnterOrdner");
}
}
}
public File_Liste FileName
{
get { return _filename; }
set
{
if (value != this._filename)
{
this._filename = value;
NotifyPropertyChanged("FileName");
}
}
}
#endregion
}
#endregion
Он заполнен папками и их подпапками. Например, когда в корневой папке есть 2 подпапки, и у них есть 2 подпапки, это будет выглядеть так
Когда я теперь добавляю файлы или папки с помощью некоторых методов, я хочу добавить новые имена файлов или объекты Ordner в мою коллекцию. Как я могу найти позицию, в которой находится SelectedItem из TreeView?
Я буферизирую SelectedItem из TreeView selectedOrdner = (Ordner) DokumentBrowser.SelectedItem;
каждый раз при его изменении и добавляю к этому элементу новые имена файлов или объекты Ordner.
Как теперь переместить новый элемент в нужное место в моем списке? или обновите старые значения новыми.
Всегда ли я должен проходить через мой список рекурсивно, чтобы мгновенно найти там объект? или существует лучший и более простой способ?
--- edit
изменил мой класс Ordner, реализовал наблюдаемую коллекцию и сохранил объект, который является корневым узлом узлов, которые он содержит, чтобы я мог их удалить. это, возможно, не лучшее решение, но оно отлично работает для меня
Я не совсем понимаю, о чем вы спрашиваете; поскольку у вас есть выбранный элемент, вы можете делать с ним все что угодно, включая вставку в него дочерних элементов. Вам нужно будет предоставить немного больше информации о том, что вы пытаетесь сделать.
Если вы пытаетесь добавить одноуровневых элементов выбранного элемента и сделать так, чтобы они отображались в древовидном представлении, вы можете попробовать найти для них другие структуры данных, которые сделают упорядоченную вставку очень простой и быстрой, например LinkedList. С другой стороны, я также предлагаю вам использовать ObservableCollection для хранения элементов, так как он будет автоматически отражать изменения в пользовательском интерфейсе. Вы также можете вставлять элементы по определенному индексу в ObservableCollection, поэтому я не могу представить, в чем может быть проблема.