使用itemsSource绑定到树视图集合时遇到困难。最终我在下面编写了代码,但它仍然不起作用。
MainWindows.xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="ButtonBase_OnClick"/>
<TreeView Name="TreeView" VerticalAlignment="Top">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}"></TextBlock>
<ItemsControl ItemsSource="{Binding Tuples}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Item1}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</StackPanel>
</Window>
和MainWindows.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public ObservableCollection<Person> Col { get; set; }
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
var Trades = new ObservableCollection<Person>
{
new Person()
{
Tuples = new List<Tuple<string,string>>()
{
new Tuple<string, string>("Peter1", "Adam1"),
new Tuple<string, string>("Peter2", "Adam2"),
new Tuple<string, string>("Peter3", "Adam3")
},
Name = "MyName"
},
new Person()
{
Tuples = new List<Tuple<string,string>>()
{
new Tuple<string, string>("Peter1", "Adam1"),
new Tuple<string, string>("Peter2", "Adam2"),
new Tuple<string, string>("Peter3", "Adam3")
},
Name = "MyName2"
}
};
TreeView.ItemsSource = Trades; // Why it's not working ?
}
}
public class Person
{
public string Name { get; set; }
public IEnumerable<Tuple<string, string>> Tuples;
}
属性名称Person的名称正确显示但是Person的IEnumerable集合根本没有显示。我做错了什么?有没有更好的做到这一点?如果可能的话,我想代表代码隐藏最小化代码的大小。
答案 0 :(得分:1)
问题,为什么Tuples
没有显示在gui中,Tuples
不是属性。这是一个领域。您需要更改声明:
public IEnumerable<Tuple<string, string>> Tuples{get;set;}
但正如我在评论中所说,你应该重新考虑使用TreeView
。一个简单的ListView
做同样的事情。
答案 1 :(得分:0)
好的,所以你忘记了“Tuples”属性的getter / setter:
public IEnumerable<Tuple<string, string>> Tuples { get; set; }
现在可以使用,其他一切都可以。