2012-01-05 11 views
0

我想在填充列表框時動態地將按鈕控件添加到列表框項目集合。我收到錯誤說「操作不支持只讀集合」。 以下是我的xaml代碼,稍後是我的xaml.cs代碼。「操作不支持只讀集合」異常,同時動態添加控件到Windows Phone中的列表框項目集合

 <ListBox x:Name="TripList" Height="465" HorizontalAlignment="Left" VerticalAlignment="Top" Width="456" Background="White" Foreground="Blue"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <Border BorderBrush="Black" BorderThickness="0,0,0,4"> 
           <StackPanel Orientation="Vertical" Width="456"> 
            <StackPanel Orientation="Vertical"> 
             <StackPanel VerticalAlignment="Top" Orientation="Horizontal"> 
              <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Width="370" FontSize="24" Text="{Binding PUDetails}"/> 
              <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Right" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="24" Text="{Binding TripStatus}"/> 
             </StackPanel> 
             <StackPanel VerticalAlignment="Top" Orientation="Horizontal"> 
              <StackPanel VerticalAlignment="Top" Orientation="Horizontal" Width="300"> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="Conf: "/> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="{Binding ConfNumber}"/> 
              </StackPanel> 
              <StackPanel VerticalAlignment="Top" Orientation="Horizontal"> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Right" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="Est Do Tm: "/> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Right" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="{Binding DOTime}"/> 
              </StackPanel> 
             </StackPanel> 
             <StackPanel VerticalAlignment="Top" Orientation="Vertical"> 
              <StackPanel x:Name="stacktest" Background="Azure" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top"> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="Svc: "/> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="{Binding TripService}"/> 
              </StackPanel> 
              <StackPanel VerticalAlignment="Top" Orientation="Horizontal"> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="PU: "/> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="{Binding PURoute}"/> 
              </StackPanel> 
              <StackPanel VerticalAlignment="Top" Orientation="Horizontal"> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="DO: "/> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="{Binding DORoute}"/> 
              </StackPanel> 
              <StackPanel VerticalAlignment="Top" Orientation="Horizontal"> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="Pax: "/> 
               <TextBlock FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" Text="{Binding PaxDetails}"/> 
              </StackPanel> 
             </StackPanel> 
            </StackPanel> 

             </StackPanel> 
           </StackPanel> 
          </Border> 

         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 


     Grid grdtest = new Grid(); 
     foreach (TripsList lst in TripList.Items) 
     { 

      System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => 
       { 

        grdtest.RowDefinitions.Add(new RowDefinition() { }); 
        grdtest.ColumnDefinitions.Add(new ColumnDefinition() { }); 
        Button button = new Button(); 
        button.HorizontalAlignment = HorizontalAlignment.Right; 
        button.VerticalAlignment = VerticalAlignment.Top; 
        button.Margin = new Thickness(3); 
        button.Width = 80; 
        button.Height = 25; 
        button.Content = "btn1"; 
        Grid.SetRow(button, 0); 
        Grid.SetColumn(button, 0); 
        grdtest.Children.Add(button); 

        LayoutRoot.Children.Add(grdtest); 
        TripList.Items.Add(grdtest); 

       }); 

     } 

可能有人請讓我知道解決問題的方式。提前致謝。

回答

0
foreach (TripsList lst in TripList.Items) 
     { 

      System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => 
       { 

        grdtest.RowDefinitions.Add(new RowDefinition() { }); 
        grdtest.ColumnDefinitions.Add(new ColumnDefinition() { }); 
        Button button = new Button(); 
        button.HorizontalAlignment = HorizontalAlignment.Right; 
        button.VerticalAlignment = VerticalAlignment.Top; 
        button.Margin = new Thickness(3); 
        button.Width = 80; 
        button.Height = 25; 
        button.Content = "btn1"; 
        Grid.SetRow(button, 0); 
        Grid.SetColumn(button, 0); 
        grdtest.Children.Add(button); 

        LayoutRoot.Children.Add(grdtest); 
        TripList.Items.Add(grdtest); 

       }); 

     } 

轉換這個的foreach循環。由於您無法修改該集合在foreach中...

+0

感謝您的回覆。我已經嘗試過,但後來得到相同的例外。 – user1105705 2012-01-05 09:40:22

+0

看來你不能直接添加任何項目。你可以做的是在已經作爲ItemsSource綁定到列表框中的集合中添加項目。列表框會自動更新。 – Tanmoy 2012-01-06 08:15:25

相關問題