WPF TreeView - 我的 ObservableCollection 应该是什么元素类型才能将它绑定到它的数据源?
WPF TreeView - what element type should my ObservableCollection be to bind it to its DataSource?
MVVM 风格。 Wihtout 过多地扰乱视图,最好是 - 不触及视图。
是否可以创建一个只包含嵌套项目的集合,而 TreeView
只显示它们?
我看过一个使用 MenuItem
作为数据类型的例子。如果我不想使用 MenuItem
怎么办?我假设,我的项目应该只实现一个定义它如何包含其他项目的接口。这是什么界面?
此外 - 我需要在每个项目上都有一个复选框,但这可能是提供项目模板的问题。
再一次,可以检查一个 MenuItem
,这可能会有用 ;)
WPF(包括 ListBox 和 TreeView)中的 ItemsControl classes 的美妙之处在于项目源可以是您喜欢的任何类型的集合。没有理由必须是基于 UI 的 class - 事实上,对于模板,它可能永远不应该是。
然后设置 ItemTemplate 以定义 UI 为 ItemsSource 集合中的每个项目显示的内容。
例如
public class Person
{
public string FirstName {get;set;}
public string LastName {get;set;}
public List<Person> Children {get;} = new List<Person>();
}
public class MainViewModel
{
public List<Person> PersonList {get;} = new List<Person>();
}
<TreeView
ItemsSource = {Binding PersonList} >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate
ItemsSource="{Binding Children}">
<StackPanel>
<Textblock Text={Binding FirstName} />
<Textblock Text={Binding LastNameName} />
</StackPanel>
</HierarchicalDataTemplate>
<TreeView.ItemTemplate>
</TreeView>
查看我的 blog post 以更深入地讨论如何在 MVVM 上下文中处理 TreeView 控件。
MVVM 风格。 Wihtout 过多地扰乱视图,最好是 - 不触及视图。
是否可以创建一个只包含嵌套项目的集合,而 TreeView
只显示它们?
我看过一个使用 MenuItem
作为数据类型的例子。如果我不想使用 MenuItem
怎么办?我假设,我的项目应该只实现一个定义它如何包含其他项目的接口。这是什么界面?
此外 - 我需要在每个项目上都有一个复选框,但这可能是提供项目模板的问题。
再一次,可以检查一个 MenuItem
,这可能会有用 ;)
WPF(包括 ListBox 和 TreeView)中的 ItemsControl classes 的美妙之处在于项目源可以是您喜欢的任何类型的集合。没有理由必须是基于 UI 的 class - 事实上,对于模板,它可能永远不应该是。
然后设置 ItemTemplate 以定义 UI 为 ItemsSource 集合中的每个项目显示的内容。
例如
public class Person
{
public string FirstName {get;set;}
public string LastName {get;set;}
public List<Person> Children {get;} = new List<Person>();
}
public class MainViewModel
{
public List<Person> PersonList {get;} = new List<Person>();
}
<TreeView
ItemsSource = {Binding PersonList} >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate
ItemsSource="{Binding Children}">
<StackPanel>
<Textblock Text={Binding FirstName} />
<Textblock Text={Binding LastNameName} />
</StackPanel>
</HierarchicalDataTemplate>
<TreeView.ItemTemplate>
</TreeView>
查看我的 blog post 以更深入地讨论如何在 MVVM 上下文中处理 TreeView 控件。