如何解决将可观察的集合绑定到WPF中的TreeView
预先感谢
我想将可观察的集合绑定到WPF中的TreeView,以便它应将每个TreeView节点显示为CountryType。 TreeView从后面的代码绑定到此集合。
这是代码:
public partial class MyUserControl: UserControl
{
public ObservableCollection<Person> myList { get; set; }
public IEnumerable<PersonViewModel> PersonViewModelList { get; set; }
public MyUserControl()
{
InitializeComponent();
PopulateCollection();
DataContext = this;
}
private void PopulateCollection()
{
myList = new ObservableCollection<Person>()
{
new Person{ Name="Name 1",Age=21,CountryType = CountryList.India},new Person{ Name="Name 2",CountryType = CountryList.US},new Person{ Name="Name 3",Age=24,CountryType = CountryList.Israel},new Person{ Name="Name 4",new Person{ Name="Name 5",CountryType = CountryList.Russia},new Person{ Name="Name 6",new Person{ Name="Name 7",new Person{ Name="Name 8",new Person{ Name="Name 9",CountryType = CountryList.Japan},new Person{ Name="Name 10",new Person{ Name="Name 11",new Person{ Name="Name 12",};
PersonViewModelList = myList.GroupBy(x => x.CountryType)
.Select(g => new PersonViewModel()
{
CountryType = g.Key,Names = g.Select(x => x.Name).OrderBy(n => n).ToList()
});
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public CountryList CountryType { get; set; }
}
public class PersonViewModel
{
public CountryList CountryType { get; set; }
public List<string> Names { get; set; }
}
public enum CountryList
{
India,Russia,US,Israel,Japan
}
UserControl(XAML文件)
<TreeView ItemsSource="{Binding PersonViewModelList}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Names}" DataType="{x:Type local:PersonViewModel}">
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=CountryType}"></TextBlock>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
预期:
我不太确定我应该在TreeView中进行哪些更改以使其起作用。 再次感谢。
解决方法
您当前的@Override
public String toString() {
return procedureName + " " + procedureDate;
}
类型不适合您的要求或对您的要求无效。您需要将数据转换为分层视图模型:
Procedure2 [Mon Jan 06 00:00:00 CET 2020]
Procedure2 [Fri Jan 03 00:00:00 CET 2020]
Procedure5 [Sun Jan 05 00:00:00 CET 2020,Thu Jan 02 00:00:00 CET 2020]
Procedure1 [Sat Jan 04 00:00:00 CET 2020]
Procedure1 [Wed Jan 01 00:00:00 CET 2020]
Procedure3 [Fri Jan 03 00:00:00 CET 2020]
只需将您当前的Person
和public class PersonViewModel
{
public CountryList CountryType { get; set; }
public List<string> Names { get; set; }
}
分组并绑定到结果:
myList
XAML:
CountryType
,
您需要反转数据结构,诸如此类...
var countyPeople = MyList.GroupBy(p => p.CountryType)
.Select(g => new {Country = g.Key,People = g.ToList()})
.OrderBy(c => c.Country)
.ToList();
然后可以将其设置为TreeView的ItemsSource。
然后,您的HierarchicalDataTemplate中的ItemsSource将绑定到此匿名类型的People属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。