我对DataBinding的理解仍处于“正在处理”的水平,所以这是我的问题。我有这些数据:
private class User
{
public string username { get; set; }
public string real_name { get; set; }
}
ObservableCollection<User> users = new ObservableCollection<User>();
...adds stuff...
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(users);
我希望它显示在两列ListBox中。我做了两列ComboBox:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="114,23,0,0" Name="comboBox_client" VerticalAlignment="Top" Width="113" IsEditable="True" ItemsSource="{Binding}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding username}" Name="left" Width="50" />
<TextBlock Text="{Binding real_name}" Name="right" Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
与
comboBox_client.ItemsSource = view;
但是我不确定如何跨步到ListBox,因为我看不到ItemTemplate,而且我不理解上面的Xaml实际做的背后的概念。如果我拿出ItemTemplate部分并在ListBox上尝试其余部分,我只是一个完整的System.Windows.DataTemplate列表框。
请指向正确的方向?
答案 0 :(得分:3)
ListBox也有ItemTemplate
属性。我想你错过了。
您可以使用与DataTemplate
相同的ComboBox
。
答案 1 :(得分:1)
ListBox:
<ListBox ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding username}" Width="50" />
<TextBlock Text="{Binding real_name}" Width="100" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但在我看来,ListView更适合这项任务:
<ListView ItemsSource="{Binding}">
<ListView.View>
<GridView>
<GridViewColumn Header="User name" DisplayMemberBinding="{Binding username}" Width="50" />
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding RealName}" Width="100" />
</GridView>
</ListView.View>
</ListView>