2014-02-12 48 views
0

首先,當我要補充一點,我是新的Windows Phone的開發,這樣下去容易對我:-)ArgumentException的一個列表框綁定到一個ObservableCollection

我想一個列表框綁定到一個ObservableCollection < LinkElement>其中每個LinkElement由名爲Tile的UserControl表示。到目前爲止,代碼的工作原理是,我在我的ObservableCollection中獲得了很多Tile:s(我已經簡化了一些代碼,現在只有一個LinkElement)。

XAML:

 <!--ContentPanel - place additional content here--> 
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="10,10,10,10"> 
     <ScrollViewer Name="linkScrollViewer"> 
      <ListBox Name="linkList" Margin="26,0,26,0" Height="380" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <Controls:Tile> 
          <toolkit:ContextMenuService.ContextMenu> 
           <toolkit:ContextMenu Name="ContextMenu" > 
            <toolkit:MenuItem Name="Edit" Header="Edit" Click="EditItem_Click"/> 
            <toolkit:MenuItem Name="Delete" Header="Delete" Click="DeleteItem_Click"/> 
           </toolkit:ContextMenu> 
          </toolkit:ContextMenuService.ContextMenu> 
         </Controls:Tile> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox>     
     </ScrollViewer> 
    </Grid> 

我設置通過代碼綁定源:我對綁定(即現在並沒有做太多)

linkList.ItemsSource = LinkProjection.List; 

和收集:

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace SoftTeam.SoftLink 
{ 
public class LinkProjection 
{ 
    private Links _links; 
    public ObservableCollection<LinkElement> List = new ObservableCollection<LinkElement>(); 
    public LinkProjection(Links links) 
    { 
     _links = links; 
    } 

    public void Refresh() 
    { 
     List.Clear(); 

     var element = new LinkElement(); 

     element.Name = "Button1"; 
     element.Header = "Media"; 
     element.Height = 200; 
     element.Width = 480; 
     element.IsLink = false; 
     element.Tag = null; 
     element.URL = ""; 

     List.Add(element); 
    } 
} 

public class LinkElement 
{ 
    public string Name; 
    public string Header; 
    public string URL; 
    public double Height; 
    public double Width; 
    public bool IsLink; 
    public object Tag; 
} 

}

問題是當我嘗試將Tile控件的屬性綁定到LinkElement類的屬性時,我得到一個System.ArgumentException「值不在預期範圍內」。由於在我的代碼中沒有出現這個問題,所以這個例外並沒有給我提示問題出在哪裏。

也就是說,當我在XAML改變

<Controls:Tile> // This works! 

到例如

<Controls:Tile TileHeader="{Binding Path=Header}"> // This crashes 

<Controls:Tile Name="{Binding Path=Name}"> // This crashes too 

發生的異常。不管我綁定哪個屬性,它都會給出一個異常。沒有綁定屬性,代碼工作正常。

我想我的問題是:爲什麼?

+0

我認爲你應該在實現'INotifyPropertyChanged'接口的Model類中使用這些屬性。然後你可以將這些屬性綁定到XAML控件。檢查此鏈接獲取更多信息[鏈接](http://developer.nokia.com/community/wiki/Data_Binding_to_controls_on_Windows_Phone) – vasuy19

+0

我向LinkElement-class添加了INotifyPropertyChanged,並在您發送的鏈接中實現了它,但現在我得到一個NullReferenceException: 在System.Windows.ni.dll中發生類型'System.NullReferenceException'的第一次機會異常 附加信息:未將對象引用設置爲對象的實例。 – Hultan

+0

我正在調查,現在,不知道如果這與我原來的問題有什麼關係... – Hultan

回答

相關問題