2014-04-09 3 views
0

У меня есть ListBox, который имеет два столбца. При событии нажатия кнопки я добавляю данные столбца в ObservableCollection, и мне нужно связать коллекцию с ListBox, чтобы отобразить данные ObservableCollection. Мне трудно понять, как это сделать.Как заполнить двойной столбец ListBox

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? Кроме того, мне как-то нужно постоянно сохранять эти данные, когда приложение перезагружается. Как я могу сделать это с помощью IsolStorage?

ответ

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> 
+0

К сожалению, что сделал не работа. Я отредактировал свое первоначальное сообщение выше, чтобы отразить ваше предложение 'ItemsSource =" {Binding Items} ", а также имена привязки TextBlock в списке для соответствия соответствующим именам в классе' History.cs', который у меня есть. Не удалось заставить его работать. – Matthew

+0

У вас есть предметы Внутри вашей наблюдаемой коллекции? если так вы пытались назначить, HistoryListBox.ItemsSource = Items; – Sajeetharan

+0

вы можете проверить здесь, http: //stackoverflow.com/questions/22463195/why-my-listbox-is-not-displaying-any-data/22463226#22463226 – Sajeetharan

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

Ничего общего тут режим! – Sajeetharan

Смежные вопросы