如何填充双列ListBox

时间:2014-04-09 07:21:13

标签: c# xaml windows-phone-8 listbox observablecollection

我有一个ListBox,它有两列。在按钮单击事件上,我将列数据添加到ObservableCollection,我需要将集合绑定到ListBox以显示ObservableCollection数据。我无法弄清楚如何做到这一点。

MainPage.xaml中

<ListBox x:Name="HistoryListBox" ItemsSource="{Binding Items}" Grid.Row="1" Grid.ColumnSpan="2">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>

                                <TextBlock Grid.Column="0" Text="{Binding ConnectionType}"/>
                                <TextBlock Grid.Column="1" Text="{Binding DateTime}"/>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

MainPage.xaml.cs中

public ObservableCollection<History> Items { get; set; }

public MainPage()
    {
        InitializeComponent();

        Items = new ObservableCollection<History>();
        HistoryListBox.DataContext = Items;
    }

private void TestButton_Click(object sender, RoutedEventArgs e)
    {
        ...

        PopulateHistoryListBox();
    }

private void PopulateHistoryListBox()
    {
        Items.Add(new History { ConnectionType = ConnectionTypeResultTextBlock.Text, DateTime = DateTime.Now });
    }

我不确定如何将ObservableCollection项正确绑定到ListBox?此外,我不知何故需要在应用程序重新加载时保留此数据。我怎么能用IsolatedStorage做到这一点?

2 个答案:

答案 0 :(得分:0)

您应该分配ItemsSource,

HistoryListBox.ItemsSource = Items; 

如果您使用的是MVVM,

将ViewModel分配给页面,而不是listBox,

 this.DataContext = ViewModel;

 <ListBox x:Name="HistoryListBox"  ItemsSource="{Binding Items}"  Grid.Row="1" Grid.ColumnSpan="2">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>

                                    <TextBlock Grid.Column="0" Text="{Binding Network}"/>
                                    <TextBlock Grid.Column="1" Text="{Binding Date}"/>
                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
    </ListBox>

答案 1 :(得分:0)

<ListBox ItemsSource="{Binding Items, Mode=TwoWay}">
...
</ListBox>