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>