我有一个收藏有一个收藏
在第一行中,我有两个 ListView,其中第二个是第一个的子视图。
第一个 ListView 显示的信息与第二个不同。
我想在 TreeView 中做同样的事情,我就是想不通。
据我所知,TreeView 的所有级别都必须提供相同的信息
我想要的是一个 TreeView 来查看级别不一样的地方
我想要的是第二个 ListView 在第一个 ListView 中的位置
不在它旁边
如果答案是我可以用 MVVM 做到这一点,那么还有另一个学习 MVVM 的好理由吗?
我可以在没有 MVVM 的情况下做到这一点吗?
<Window x:Class="TreeView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:TreeView"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="3*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView x:Name="lvFamilies" Grid.Row="0" Grid.Column="0"
ItemsSource="{Binding}" DisplayMemberPath="Information"/>
<ListView x:Name="lvChildren" Grid.Row="0" Grid.Column="1"
ItemsSource="{Binding ElementName=lvFamilies, Path=SelectedItem.Children}" DisplayMemberPath="Name"/>
<TreeView x:Name="tvFamilies" Grid.Row="1" Grid.ColumnSpan="2"
ItemsSource="{Binding}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type local:iLimitedTreeView}">
<CheckBox IsChecked="True" Click="CheckBox_Click">
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</CheckBox>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
namespace TreeView
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Family> Families = new List<Family>();
Families.Add(new Family("uncle enrie", new List<string>() {"cousin sal", "niece all"}));
Families.Add(new Family("aunt harriet", new List<string>() { "cousin jim", "cousin bob" }));
Families.Add(new Family("aunt nanacy", new List<string>() { "cousin art", "cousin jhonny", "niece amy", "niece sarah" }));
lvFamilies.ItemsSource = Families;
tvFamilies.ItemsSource = Families;
}
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("CheckBox_Click");
}
}
public class person : iLimitedTreeView
{
public string Name { get; set; }
public person(string name) { Name = name; }
}
public class Family : iLimitedTreeView
{
public string Name { get { return Parent.Name; } }
public person Parent { get; set; }
public string Information
{
get
{
return Name + " " + Children.Count.ToString();
}
}
public List<person> Children { get; set; }
public Family(string parent, List<string> children)
{
Parent = new person(parent);
Children = new List<person>();
foreach (string s in children) { Children.Add(new person(s)); }
}
}
public interface iLimitedTreeView
{
string Name { get; }
}
}