Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF TreeView ObservableCollection通知示例代码_C#_Wpf_Treeview_Observablecollection - Fatal编程技术网

C# WPF TreeView ObservableCollection通知示例代码

C# WPF TreeView ObservableCollection通知示例代码,c#,wpf,treeview,observablecollection,C#,Wpf,Treeview,Observablecollection,我正试图编写一个C#WPF应用程序,我被TreeView和ObservableCollection所困扰 这是我的TreeView项目 | Root --- SubItem ------ SubItem | Root --- SubItem ------ SubItem ---------- SubItem 我正在从其他窗口修改此项目,我需要在不重新加载所有项目的情况下更新此树视图。我已经搜索过了,发现了一个明显的集合。但我不明白如何使用ObservableCollection、通知更改和更新

我正试图编写一个C#WPF应用程序,我被TreeView和ObservableCollection所困扰

这是我的TreeView项目

| Root
--- SubItem
------ SubItem
| Root
--- SubItem
------ SubItem
---------- SubItem
我正在从其他窗口修改此项目,我需要在不重新加载所有项目的情况下更新此树视图。我已经搜索过了,发现了一个明显的集合。但我不明白如何使用ObservableCollection、通知更改和更新此列表。
您能给我一些示例代码或帮助我完成这项工作吗?

这里是一个很好的实现示例

这只是另一个样本

您的型号:

public interface IFolder
{
    string FullPath { get; }
    string FolderLabel { get; }
    ObservableCollection<IFolder> Folders { get; } 
}
公共接口IFolder
{
字符串完整路径{get;}
字符串FolderLabel{get;}
ObservableCollection文件夹{get;}
}
您的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;
}
类视图模型:INotifyPropertyChanged
{
公共视图模型()
{
m_folders=新的ObservableCollection();
//添加根项目
添加(新文件夹{FolderLabel=“Dummy1”,FullPath=@“C:\Dummy1”});
添加(新文件夹{FolderLabel=“Dummy2”,FullPath=@“C:\Dummy2”});
添加(新文件夹{FolderLabel=“Dummy3”,FullPath=@“C:\Dummy3”});
添加(新文件夹{FolderLabel=“Dummy4”,FullPath=@“C:\Dummy4”});
//添加子项
文件夹[0]。文件夹。添加(新文件夹{FolderLabel=“Dummy11”,FullPath=@“C:\Dummy11”});
文件夹[0]。文件夹。添加(新文件夹{FolderLabel=“Dummy12”,FullPath=@“C:\Dummy12”});
文件夹[0]。文件夹。添加(新文件夹{FolderLabel=“Dummy13”,FullPath=@“C:\Dummy13”});
文件夹[0]。文件夹。添加(新文件夹{FolderLabel=“Dummy14”,FullPath=@“C:\Dummy14”});
}
公共字符串测试{get;set;}
私有可观察收集m_文件夹;
公共可观测集合文件夹
{
获取{返回m_文件夹;}
设置
{
m_=值;
通知财产变更(“文件夹”);
}
}
作废NotifiyPropertyChanged(字符串属性)
{
if(PropertyChanged!=null)
PropertyChanged(此,新PropertyChangedEventArgs(property));
}
公共事件属性更改事件处理程序属性更改;
}
在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>