Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 区域属性 公共只读集合子项 { 得到 { 返回儿童; } } 公共图书馆被扩展了 { 得到 { 返回已扩展; } 设置 { 如果(值!=\u扩展) { _isExpanded=值; 本协议项下的不动产变更(“IsExpanded”); } //一直展开到根。 if(_isExpanded&&u parentNode!=null) _parentNode.IsExpanded=true; } } 公选学校 { 得到 { 返回(未选);; } 设置 { _isSelected=值; 基础.提高产权变更(“IsSelected”); //如果(被选中) //{ _parentTree.RaisePropertyChangedEvent(“SelectedFolder”); //} } } 公共字符串名 { 得到 { 返回\u projectFolder.Name; } } 公共项目文件夹项目文件夹 { 得到 { 返回项目文件夹; } } #endregion//属性_C#_Wpf_Listview_Mvvm_Binding - Fatal编程技术网

C# 区域属性 公共只读集合子项 { 得到 { 返回儿童; } } 公共图书馆被扩展了 { 得到 { 返回已扩展; } 设置 { 如果(值!=\u扩展) { _isExpanded=值; 本协议项下的不动产变更(“IsExpanded”); } //一直展开到根。 if(_isExpanded&&u parentNode!=null) _parentNode.IsExpanded=true; } } 公选学校 { 得到 { 返回(未选);; } 设置 { _isSelected=值; 基础.提高产权变更(“IsSelected”); //如果(被选中) //{ _parentTree.RaisePropertyChangedEvent(“SelectedFolder”); //} } } 公共字符串名 { 得到 { 返回\u projectFolder.Name; } } 公共项目文件夹项目文件夹 { 得到 { 返回项目文件夹; } } #endregion//属性

C# 区域属性 公共只读集合子项 { 得到 { 返回儿童; } } 公共图书馆被扩展了 { 得到 { 返回已扩展; } 设置 { 如果(值!=\u扩展) { _isExpanded=值; 本协议项下的不动产变更(“IsExpanded”); } //一直展开到根。 if(_isExpanded&&u parentNode!=null) _parentNode.IsExpanded=true; } } 公选学校 { 得到 { 返回(未选);; } 设置 { _isSelected=值; 基础.提高产权变更(“IsSelected”); //如果(被选中) //{ _parentTree.RaisePropertyChangedEvent(“SelectedFolder”); //} } } 公共字符串名 { 得到 { 返回\u projectFolder.Name; } } 公共项目文件夹项目文件夹 { 得到 { 返回项目文件夹; } } #endregion//属性,c#,wpf,listview,mvvm,binding,C#,Wpf,Listview,Mvvm,Binding,更改所有 List<T> to observablecollection<T> 列表到observablecollection 因为当有新文件或文件夹添加项目时,您不会创建新列表,因为observablecollection实现了INotifyCollectionChanged和INotifyPropertyChanged,它将在内部负责通知和刷新视图。但是list不能做到这一点当listView首先崩溃时,删除空检查将如何更新它?您能展示实现这两个属性的代码吗?i、

更改所有

List<T> to observablecollection<T>
列表到observablecollection

因为当有新文件或文件夹添加项目时,您不会创建新列表,因为observablecollection实现了INotifyCollectionChanged和INotifyPropertyChanged,它将在内部负责通知和刷新视图。但是list不能做到这一点

当listView首先崩溃时,删除空检查将如何更新它?您能展示实现这两个属性的代码吗?i、 e.两个属性的getter和setter?另外,“RootProjectFolders”是在哪里初始化的?您省略了很多我们需要解决的代码。谢谢。这起作用了;但是,我仍然不明白为什么列表方法不起作用,因为我直接引发property changed事件来提醒ListView其ItemsSource已更改。这不会导致ListView刷新吗?为什么在我添加“null”检查之前它一直在“工作”(忽略NullException)?很奇怪。
<TreeView Name="treeviewProjectFolders" Grid.Column="0"
            ItemsSource="{Binding Path=RootProjectFolders}">
            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                    <Setter Property="FontWeight" Value="Normal" />
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="FontWeight" Value="Bold" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TreeView.ItemContainerStyle>
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate 
                    ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding Path=Name}" />
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
        <GridSplitter Name="splitterProjects" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        <ListView Name="listviewProjects" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
            ItemsSource="{Binding Path=ProjectsInSelectedFolder}">
            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Name}" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
public class SelectProjectViewModel : ViewModelBase
{
    #region Fields
    List<ProjectViewModel> _projectsInSelectedFolder;
    List<ProjectFolderViewModel> _rootProjectFolders;
    static ProjectFolderViewModel _selectedFolder = null;
    ProjectViewModel _selectedProject;
    #endregion // Fields

    #region Constructor
    public SelectProjectViewModel(ProjectFolders rootProjectFolders)
    {
        if (_rootProjectFolders != null) { _rootProjectFolders.Clear(); }            
        _rootProjectFolders = new List<ProjectFolderViewModel>();
        foreach (ProjectFolder rootFolder in rootProjectFolders)
        {
            _rootProjectFolders.Add(new ProjectFolderViewModel(rootFolder, this));
        }
        _projectsInSelectedFolder = new List<ProjectViewModel>();
        // Subscribe to events
        this.PropertyChanged += OnPropertyChanged;
    }
    #endregion // Constructor

    #region Properties
    public List<ProjectFolderViewModel> RootProjectFolders
    {
        get
        {
            return _rootProjectFolders;
        }
    }        
    public List<ProjectViewModel> ProjectsInSelectedFolder
    {
        get
        {                
            return _projectsInSelectedFolder;
        }
    }
    public ProjectFolderViewModel SelectedFolder
    {
        get 
        { 
            return _selectedFolder; 
        }
        set
        {
            if (_selectedFolder != value)
            {
                _selectedFolder = value;
            }
        }
    }
    public ProjectViewModel SelectedProject
    {
        get
        {
            return _selectedProject;
        }
        set
        {
            _selectedProject = value;
            base.RaisePropertyChangedEvent("SelectedProject");
        }
    }
    #endregion // Properties

    #region Methods
    public void FindSelectedFolder(ProjectFolderViewModel root)
    {
        if (root.IsSelected) { _selectedFolder = root; }
        else
        {
            foreach (ProjectFolderViewModel folder in root.Children)
            {
                if (_selectedFolder == null)
                {
                    FindSelectedFolder(folder);
                }
            }
        }            
    }
    #endregion // Methods

    #region Event Handlers
    void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        switch (e.PropertyName)
        {
            case "SelectedFolder":
                _selectedFolder = null;
                foreach (ProjectFolderViewModel root in this.RootProjectFolders)
                {
                    if (_selectedFolder == null)
                    {
                        this.FindSelectedFolder(root);
                    }
                }
                _projectsInSelectedFolder.Clear();
                if ((this.SelectedFolder != null) && (this.SelectedFolder.ProjectFolder.Projects != null))
                {
                    foreach (Project project in this.SelectedFolder.ProjectFolder.Projects)
                    {
                        _projectsInSelectedFolder.Add(new ProjectViewModel(project));
                    }
                }
                base.RaisePropertyChangedEvent("ProjectsInSelectedFolder");
                break;
        }
    }
    #endregion // Event Handlers
public class ProjectFolderViewModel : ViewModelBase
{
    #region Fields
    ReadOnlyCollection<ProjectFolderViewModel> _children;
    List<ProjectFolderViewModel> _childrenList;
    bool _isExpanded;
    bool _isSelected;
    ProjectFolderViewModel _parentNode;
    SelectProjectViewModel _parentTree;
    ProjectFolder _projectFolder;        
    #endregion // Fields

    #region Constructor
    public ProjectFolderViewModel(ProjectFolder projectFolder, SelectProjectViewModel parentTree) : this(projectFolder, parentTree, null)
    { }
    private ProjectFolderViewModel(ProjectFolder projectFolder, SelectProjectViewModel parentTree, ProjectFolderViewModel parentNode)
    {
        _projectFolder = projectFolder;
        _parentTree = parentTree;
        _parentNode = parentNode;
        _childrenList = new List<ProjectFolderViewModel>();
        foreach (ProjectFolder child in _projectFolder.ChildFolders)
        {
            _childrenList.Add(new ProjectFolderViewModel(child, _parentTree));
        }
        _children = new ReadOnlyCollection<ProjectFolderViewModel>(_childrenList);
    }
    #endregion // Constructor

    #region Properties
    public ReadOnlyCollection<ProjectFolderViewModel> Children
    {
        get
        {
            return _children;
        }
    }
    public bool IsExpanded
    {
        get 
        { 
            return _isExpanded; 
        }
        set
        {
            if (value != _isExpanded)
            {
                _isExpanded = value;
                this.OnPropertyChanged("IsExpanded");
            }
            // Expand all the way up to the root.
            if (_isExpanded && _parentNode != null)
                _parentNode.IsExpanded = true;
        }
    }
    public bool IsSelected
    {
        get
        {
            return _isSelected;
        }
        set
        {
            _isSelected = value;
            base.RaisePropertyChangedEvent("IsSelected");
            //if (_isSelected)
            //{ 
                _parentTree.RaisePropertyChangedEvent("SelectedFolder");
            //}
        }
    }
    public string Name
    {
        get
        {
            return _projectFolder.Name;
        }
    }
    public ProjectFolder ProjectFolder
    {
        get
        {
            return _projectFolder;
        }
    }
    #endregion // Properties
List<T> to observablecollection<T>