我使用列表框显示项目列表,下面给出了XAML代码,
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox x:Name="List" HorizontalAlignment="Left" Height="612" Margin="6,7,0,0" VerticalAlignment="Top" Width="443" SelectionChanged="List_SelectionChanged_1">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Width="400" Height="50">
<TextBlock x:Name="tbName" Width="400" Height="44" FontSize="22" FontWeight="Bold" Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
我只是通过以下C#代码填充列表,
foreach (var item in categoryDetails.Category)
{
CategoryDisplay data = new CategoryDisplay();
data.Name = item.accountName;
data.Id = item.accountID;
this.List.Items.Add(data);
}
一切顺利,直到最后一步,
this.List.Items.Add(data);
被执行,出现错误声明,
An exception of type 'System.UnauthorizedAccessException' occurred in System.Windows.ni.dll but was not handled in user code
可能是什么问题?我该怎么做才能纠正它?
答案 0 :(得分:1)
听起来this.List.Items
的收藏品尚未初始化。
当你声明你的集合时(让我们假设它是一个ObservableCollection,但我无法从你的代码中看到该类型应该是什么),那么你需要先将它初始化为new ObservableCollection<AccountDetail>()
然后才能添加项目。
答案 1 :(得分:0)
根据文档,默认情况下应将System.Windows.Controls.ItemCollection.ItemCollection(您的Items)初始化为空集合。您是否在代码执行块中的某处将其设置为null?该属性在wp7中没有setter。
无论哪种方式,为控件分配数据源的更好,更有效的方法是一次创建集合,然后将其分配给控件ItemSource属性
var data = new[] { 1, 2, 3, 4 };
this.List.ItemsSource = from i in data select new CategoryDisplay() { id = i, Name = i.ToString(CultureInfo.InvariantCulture) };