Привет, у меня есть 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.
Как я могу теперь бросить новый предмет в нужную позицию в моем списке? или обновите старый новыми значениями.
Всегда ли мне нужно идти рекурсивно по моему списку, чтобы на мгновение найти Объект? или существует там лучше и проще?
--- редактировать
изменил мой класс Ordner, реализовал наблюдаемую коллекцию и сохранил Объект, который является корневым узлом узлов, которые он содержит, чтобы я мог их удалить. Возможно, это не лучшее решение, но оно прекрасно работает для меня