Wpf &引用;操作不支持只读收集“;在windows phone中将控件动态添加到列表框项目集合时发生异常
我试图在填充listbox时将按钮控件动态添加到listbox项集合。我收到的错误是“操作不支持只读收集”。 下面是我的xaml代码,后面是我的xaml.cs代码Wpf &引用;操作不支持只读收集“;在windows phone中将控件动态添加到列表框项目集合时发生异常,wpf,silverlight,windows-phone-7.1,Wpf,Silverlight,Windows Phone 7.1,我试图在填充listbox时将按钮控件动态添加到listbox项集合。我收到的错误是“操作不支持只读收集”。 下面是我的xaml代码,后面是我的xaml.cs代码 <ListBox x:Name="TripList" Height="465" HorizontalAlignment="Left" VerticalAlignment="Top" Width="456" Background="White" Foreground="Blue">
<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);
});
}
Grid grdtest=新网格();
foreach(TripsList lst在TripList.Items中)
{
System.Windows.Deployment.Current.Dispatcher.BeginInvoke(()=>
{
添加(新的RowDefinition(){});
grdtest.ColumnDefinitions.Add(新ColumnDefinition(){});
按钮按钮=新按钮();
button.HorizontalAlignment=HorizontalAlignment.Right;
button.VerticalAlignment=VerticalAlignment.Top;
按钮。边距=新厚度(3);
按钮宽度=80;
按钮,高度=25;
button.Content=“btn1”;
Grid.SetRow(按钮,0);
Grid.SetColumn(按钮,0);
grdtest.Children.Add(按钮);
LayoutRoot.Children.Add(grdtest);
三列.项目.添加(grdtest);
});
}
有人能告诉我解决这个问题的方法吗。提前谢谢
将此foreach转换为for循环。由于您无法在foreach中修改集合…感谢您的回复。我试过了,但是得到了同样的异常。似乎你不能直接添加任何项目。您可以做的是在集合中添加项,该集合已绑定为ItemsSource,并带有listbox。列表框将自动更新。
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);
});
}