列表框中的两列数据绑定有问题

时间:2012-05-24 11:17:57

标签: c# wpf data-binding

我对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列表框。

请指向正确的方向?

2 个答案:

答案 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>