WPF TreeView ObservableCollection通知示例代码 [英] WPF TreeView ObservableCollection notifying sample code
问题描述
我正在尝试编写C#WPF应用程序,并且陷入了TreeView和ObservableCollection的困扰.
I'm trying to write a C# WPF application and I'm stuck with the TreeView and ObservableCollection.
这是我的TreeView项目.
This is my TreeView Items.
| Root
--- SubItem
------ SubItem
| Root
--- SubItem
------ SubItem
---------- SubItem
我正在从其他窗口修改此项目,我需要在不重新加载所有项目的情况下更新此树形视图.我进行了搜索,找到了ObservableCollection.但是我不明白如何使用ObservableCollection并通知更改和更新此列表. 您可以给我一些示例代码还是可以帮助我做到这一点?
I'm modifyng this items from other window and I need to update this treeview without re-loading all items. I've made my search and I found ObservableCollection. But I can't understand how to use ObservableCollection and notify changes and update this list. Can you give me some sample code or help me with doing that?
推荐答案
Here is a good example to Implement Simplifying the WPF TreeView by Using the ViewModel Pattern
.
这只是另一个示例,
您的型号:
public interface IFolder
{
string FullPath { get; }
string FolderLabel { get; }
ObservableCollection<IFolder> Folders { get; }
}
您的ViewModel:
Your ViewModel:
class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
m_folders = new ObservableCollection<IFolder>();
//add Root items
Folders.Add(new Folder { FolderLabel = "Dummy1", FullPath = @"C:\dummy1" });
Folders.Add(new Folder { FolderLabel = "Dummy2", FullPath = @"C:\dummy2" });
Folders.Add(new Folder { FolderLabel = "Dummy3", FullPath = @"C:\dummy3" });
Folders.Add(new Folder { FolderLabel = "Dummy4", FullPath = @"C:\dummy4" });
//add sub items
Folders[0].Folders.Add(new Folder { FolderLabel = "Dummy11", FullPath = @"C:\dummy11" });
Folders[0].Folders.Add(new Folder { FolderLabel = "Dummy12", FullPath = @"C:\dummy12" });
Folders[0].Folders.Add(new Folder { FolderLabel = "Dummy13", FullPath = @"C:\dummy13" });
Folders[0].Folders.Add(new Folder { FolderLabel = "Dummy14", FullPath = @"C:\dummy14" });
}
public string TEST { get; set; }
private ObservableCollection<IFolder> m_folders;
public ObservableCollection<IFolder> Folders
{
get { return m_folders; }
set
{
m_folders = value;
NotifiyPropertyChanged("Folders");
}
}
void NotifiyPropertyChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
public event PropertyChangedEventHandler PropertyChanged;
}
在xaml中:
<TextBlock Text="Simple root binding" Foreground="Red" Margin="10,10,0,0" />
<TreeView ItemsSource="{Binding Folders}" Margin="10">
<TreeView.ItemTemplate>
<DataTemplate>
<TreeViewItem Header="{Binding FolderLabel}"/>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
这篇关于WPF TreeView ObservableCollection通知示例代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!