2011-11-08 85 views
0

我是WPF的新手,仍然試圖掌握WPF控件的綁定方面。首先讓我介紹一下我正在使用的代碼&然後我會提出問題。如何將子列表或數組綁定到datagrid?

CODE

public class ScannedDocument : Csla.BusinessBase<ScannedDocument> 
{ 
    private string _documentId = string.Empty; 
    private BarcodeList _barcodeList = null; 

    public string DocumentId 
    { 
     get { return _documentId; } 
    } 

    public BarcodeList Barcodes 
    { 
     get { return _barcodeList; } 
     set 
     { 
     if (_barcodeList.Equals(value)) 
     { 
      _barcodeList = value; 
      PropertyHasChanged("Barcodes"); 
     } 
     } 

    } 
} 

public class BarcodeList : Csla.BusinessListBase<BarcodeList, Barcode> 
{ 
    public static BarcodeList NewBarcodeList() 
    { return new BarcodeList(); } 

    private BarcodeList() {} 
} 

public class Barcode : Csla.BusinessBase<Barcode> 
{  
    public string Value 
    { 
     get { return GetBarcodeValue(); } 
    } 

    public static Barcode NewBarcode() 
    { return new Barcode(); } 

    private Barcode() {} 
} 

XAML

<dg:DataGrid GridLinesVisibility="None" AutoGenerateColumns="False" Name="ScannedDocumentsListView"> 
<dg:DataGrid.Columns> 
    <dg:DataGridTextColumn Header="Document Name" IsReadOnly="True" Binding="{Binding Path=DocumentId}"/> 
    <dg:DataGridTextColumn Header="Index 1" Width="80" IsReadOnly="True" Binding="{Binding Path=Barcodes[0].Value}" /> 
    <dg:DataGridTextColumn Header="Index 2" Width="80" IsReadOnly="True" Binding="{Binding Path=Barcodes[1].Value}" /> 
    <dg:DataGridTextColumn Header="Index 3" Width="80" IsReadOnly="True" Binding="{Binding Path=Barcodes[2].Value}" /> 
    <dg:DataGridTextColumn Header="Index 4" Width="80" IsReadOnly="True" Binding="{Binding Path=Barcodes[3].Value}" /> 
    <dg:DataGridTextColumn Header="Index 5" Width="80" IsReadOnly="True" Binding="{Binding Path=Barcodes[4].Value}" /> 
    <dg:DataGridTextColumn Header="Index 6" Width="80" IsReadOnly="True" Binding="{Binding Path=Barcodes[5].Value}" /> 
</dg:DataGrid.Columns> 

問題

當I E執行此代碼,我可以將DocumentId成功綁定到網格,但是條形碼列表似乎沒有正確綁定。我已經驗證了列表中有數據。我究竟做錯了什麼?

回答

2

在這些情況下使用的通常模式是爲您的BarCode對象實現INotifyPropertyChanged並使用ObservableCollection將它們暴露給DataGridControl。 DataGrid然後會顯示每行一個Barcode對象,每列顯示BarCode的公共屬性。

然後將條形碼或集合中的更改傳播到DataGrid,反之亦然(取決於DataGrid屬性)。

相關問題