2013-10-23 34 views
0

我使用列表框中顯示的項目列表,因爲它的XAML代碼如下,麻煩的Windows Phone在列表中添加數據

<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#代碼填充列表,當執行

this.List.Items.Add(data); 

foreach (var item in categoryDetails.Category) 
     { 
      CategoryDisplay data = new CategoryDisplay(); 
      data.Name = item.accountName; 
      data.Id = item.accountID; 
      this.List.Items.Add(data); 
     } 

一切順利,直到最後一步,總會有一個錯誤,說明

An exception of type 'System.UnauthorizedAccessException' occurred in System.Windows.ni.dll but was not handled in user code 

可能是什麼問題?我應該怎麼做才能糾正它?

回答

1

聽起來你的收藏在this.List.Items尚未初始化。當你聲明你的集合(讓我們假設它是一個ObservableCollection,但是我看不到你的代碼應該是什麼類型),那麼你需要初始化它到new ObservableCollection<AccountDetail>(),然後才能添加項目到它。

+0

我已經改變了錯誤味精,請看看它 – Aju

0

根據文檔,System.Windows.Controls.ItemCollection.ItemCollection(您的Items)應默認初始化爲一個空集合。你有沒有把它設置爲null在你的代碼執行塊的某個地方?該物業在wp7中沒有裝備。

無論哪種方式,對控制指定數據源的更好,更有效的方法是要一次創建集合,然後將其分配給控件的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) }; 
+0

謝謝@FunksMaName它是正確的,但抱歉,我只是錯誤地輸入了錯誤。現在我已經用正確的編輯了我的問題,請看看它。 – Aju

+2

是否有可能嘗試從非UI線程更新列表?無法從上面的代碼中知道,但如果是這種情況,那麼將您的foreach塊封裝在調度程序塊內,如Deployment.Current.Dispatcher.BeginInvoke(()=> {//此處代碼}); – FunksMaName

+0

,這是完全正確的! – Aju