【发布时间】:2018-06-21 21:25:32
【问题描述】:
这是我的模型:
public class TreeItem : INotifyPropertyChanged
{
private ObservableCollection<TreeItem> _items;
private string _fullPath;
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public string FullPath
{
get
{
return _fullPath;
}
set
{
_fullPath = value;
OnPropertyChanged("FullPath");
}
}
public ObservableCollection<TreeItem> Items
{
get
{
return _items;
}
set
{
_items = value;
OnPropertyChanged("Items");
}
}
public TreeItem(string name)
{
Name = name;
Items = new ObservableCollection<TreeItem>();
}
public TreeItem()
{
Items = new ObservableCollection<TreeItem>();
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
我实现了 INotifyPropertyChanged,因为我认为通过添加这个实现可以解决这个问题。于是就有了我的 Xaml TreeView:
<TreeView Name="FileFolderTree" Grid.Column="2" Grid.Row="2" Background="DarkGray" ItemsSource="{Binding FolderFiles}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type model:TreeItem}" ItemsSource="{Binding Path=Items}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
这是 MainWindow.cs,DataContext 等于新的 MainWindowViewModel:
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
所以,MainWindowViewModel 有一个公共属性:
private TreeItem _folderFiles;
public TreeItem FolderFiles {
get
{
return _folderFiles;
}
set
{
_folderFiles = value;
OnPropertyChanged("FolderFiles");
}
}
在某些方法中,我看到 _folderFiles 包含数据,但它没有显示在 treeView 上。如果我将硬编码 treeView 中的某些元素,它们将被显示。
我做错了什么?
【问题讨论】:
-
FolderFiles应该是IEnumerable<TreeItem>,因为您将它用作ItemsSource(请参阅绑定:ItemsSource="{Binding FolderFiles}")
标签: c# wpf mvvm data-binding treeview