0

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

请指出正确的方向?

4

2 回答 2

3

ListBox 也有一个ItemTemplate属性。我想你只是错过了。

DataTemplate您可以使用与ComboBox.

于 2012-05-24T11:24:10.020 回答
1

列表框:

    <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>
于 2012-05-24T11:28:42.670 回答