【发布时间】:2014-10-12 22:37:49
【问题描述】:
我正在尝试让我的 TreeView 绑定到将要更新的字典。我已经在数据类型本身上实现了 INotifyProperyChangedHandler,但这会影响树视图吗?
我的目标是:
-FolderName
--->Item1
--->Item2
-FolderName
--->Item1
这是我的观点:
<UserControl.Resources>
<HierarchicalDataTemplate x:Key="ChildTemplate" >
<TextBlock FontStyle="Italic" Text="{Binding Path=m_Items}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="NameTemplate"
ItemsSource="{Binding Path=Value}"
ItemTemplate="{StaticResource ChildTemplate}">
<TextBlock Foreground="White" Text="{Binding m_Name}" FontWeight="Bold" />
</HierarchicalDataTemplate>
</UserControl.Resources>
<TreeView x:Name="NewTree" ItemsSource="{Binding m_FolderList, UpdateSourceTrigger=PropertyChanged}" ItemTemplate="{StaticResource NameTemplate}">
</TreeView>
我的视图模型:
public Dictionary<UInt16, Folder> m_FolderList
{
get { return Manager.Instance.GetFolderDirectory(); }
}
我的文件夹类:
public class Folder
{
public m_Name { get; set; }
public ObservableCollection<String> m_Items { get; set; }
}
我得到的是一个永远不会更新的空白树视图。每当我向该单例管理器实例中的“FolderDirectory”添加新项目时,我都会调用 OnPropertyChanged。这适用于我绑定到该字典或文件夹项的任何其他内容。
我试图遵循这一点,但是绑定如何观察到它自动将“FamilyMembers”列表作为子项使我无法理解,因为您在任何地方都没有明确告诉 XAML 模板它应该将 itemsource 绑定到该集合。 http://www.wpf-tutorial.com/treeview-control/treeview-data-binding-multiple-templates/
编辑: 控件肯定会从我的单例中获取所有值。我只是在玩弄绑定路径的命名,当我不小心将 TreeView 设置为绑定到 m_FolderList.Value (字典有值,而不仅仅是值)时,它给了我控制台中的绑定错误,就像里面的项目一样多字典。
EDIT2:
public List<Folder> m_FolderList
{
get
{
List<Folder> list = new List<Folder>();
list.AddRange(Manager.Instace.GetFolderDirectory().Values);
return list;
}
}
如果我这样做,而不是字典,则会出现第一级信息......这很麻烦
【问题讨论】:
标签: c# wpf dictionary treeview