我试图让我的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>
我的ViewModel:
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; }
}
我得到的是一张永不更新的空白树视图。每当我向&#34; FolderDirectory&#34;添加新项目时在那个单例管理器实例中,我做了一个OnPropertyChanged调用。这适用于我已经绑定到该词典或文件夹项目的任何其他内容。
我试图遵循这一点,但绑定如何观察它自动生成孩子们的家庭成员&#34; list逃避了我,因为你没有明确地告诉XAML模板它应该将itemsource绑定到该集合。 http://www.wpf-tutorial.com/treeview-control/treeview-data-binding-multiple-templates/
编辑: 控制肯定是从我的单身人士获得所有价值。我只是在玩Binding Path的命名,当我意外地将TreeView设置为绑定到m_FolderList.Value(字典有值,而不仅仅是Value)时,它在控制台中给出了尽可能多的绑定错误。字典。
EDIT2:
public List<Folder> m_FolderList
{
get
{
List<Folder> list = new List<Folder>();
list.AddRange(Manager.Instace.GetFolderDirectory().Values);
return list;
}
}
如果我这样做,而不是字典,则会出现第一级信息......这是一件令人讨厌的事情
答案 0 :(得分:0)
试试这个
<Window.Resources>
<DataTemplate x:Key="secondLevel">
<TextBlock Text="{Binding}"/>
</DataTemplate>
<HierarchicalDataTemplate x:Key="topLevel" ItemsSource="{Binding Value.m_Items}" ItemTemplate="{StaticResource secondLevel}">
<TextBlock Text="{Binding Value.m_Name}">
</TextBlock>
</HierarchicalDataTemplate>
</Window.Resources>
<StackPanel>
<TreeView x:Name="FolderTree" ItemsSource="{Binding m_FolderList}" ItemTemplate="{StaticResource topLevel}">
</TreeView>
</StackPanel>
输出
![]()
答案 1 :(得分:0)
public List<Folder> m_FolderList
{
get
{
List<Folder> list = new List<Process>();
list.AddRange(Manager.Instance.GetFolderDirectory().Values);
return list;
}
}
我讨厌这样做,但它是使用Heirarchical模板的唯一方法。我曾经多次使用绑定到字典Path = Value但它只是拒绝在这个实例中工作很多次尝试。它不是最好的答案,但它是我目前唯一的工作方式。