C# SilverLight中的TreeView存在问题
我的班级结构如下:C# SilverLight中的TreeView存在问题,c#,silverlight,xaml,treeview,C#,Silverlight,Xaml,Treeview,我的班级结构如下: class Organization { string Name; List<User> users; List<Organization> Children; } class User { string Name; } 我不能修改这些类。 我需要在一个TreeView控件中显示有关组织和用户的所有信息。即,组织节点应包含子组织和用户节点。 问题是在Silverlight中没有CompositeCollections
class Organization
{
string Name;
List<User> users;
List<Organization> Children;
}
class User
{
string Name;
}
我不能修改这些类。
我需要在一个TreeView控件中显示有关组织和用户的所有信息。即,组织节点应包含子组织和用户节点。
问题是在Silverlight中没有CompositeCollections或多绑定的情况下,我如何做到这一点 我误解了这个问题-我不知道SL树如何将Children属性和Users属性都显示为子节点。您可能希望创建一个具有AllChildren属性的包装类,该属性返回同一集合中的用户和组织。SL树的HierarcialDataTemplate有一个名为ItemsSource的属性,该属性应绑定到单个子集合。很抱歉,我帮不上什么忙-我想删除这个答案,但我看不到这样做的方法。这个解决方案的棘手部分是必须处理每个节点下的两个集合,而TreeView的HierarchycalDataTemplate只支持绑定到单个ItemsSource 一个选项是创建一个ViewModel,将集合合并到一个类中,该类表示TreeView中的一个条目,然后可以绑定到HierarchycalDataTemplate中 首先,我创建了ViewModel类:
public class TreeViewEntry
{
public string Name { get; set; }
public IEnumerable<TreeViewEntry> Children { get; set; }
public object Model { get; set; }
}
然后我使用一个函数、一些Linq和一些递归将所有对象拉入一个集合:
private IEnumerable<TreeViewEntry> OrganizationsToTreeViewEntries(IEnumerable<Organization> orgs)
{
return (from o in orgs
select new TreeViewEntry
{
Name = o.Name,
Model = o,
Children = (from u in o.Users
select new TreeViewEntry
{
Name = u.Name,
Model = u
}
).Concat(OrganizationsToTreeViewEntries(o.Children))
});
}
public MainPage()
{
InitializeComponent();
var items = OrganizationsToTreeViewEntries(existingOrganizationData);
OrgTree.ItemsSource = items;
}
现在,我有了一个合并的ItemsSource,可以轻松设置HierarchycalDataTemplate的样式:
<UserControl.Resources>
<common:HierarchicalDataTemplate x:Key="OrgTemplate" ItemsSource="{Binding Children}">
<StackPanel>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</common:HierarchicalDataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource SampleDataSource}}">
<controls:TreeView x:Name="OrgTree" HorizontalAlignment="Left" Margin="8,8,0,8" Width="225" ItemTemplate="{StaticResource OrgTemplate}" />
</Grid>
如果要调整某些元素的视觉样式,可以使用ValueConverter调整FontWeight之类的内容。例如,在我的测试中,我在FontWeight上创建了一个ValueConverter,它绑定到TreeViewEntry的Model属性。此XAML不满足用户的要求。它在哪里显示用户集合的任何详细信息,什么是ShortTitle?