2011-11-08 29 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> 

PROBLEM

I Eこのコードを実行すると、DocumentIdをグリッドに正常にバインドできますが、バーコードリストは正しくバインドされていないようです。リストにデータがあることを確認しました。私は間違って何をしていますか?

答えて

2

これらのケースで使用する通常のパターンは、BarCodeオブジェクトにINotifyPropertyChangedを実装し、それらをObservableCollectionでDataGridControlに公開することです。 DataGridは1行につき1つのBarcodeオブジェクトを表示し、各列はBarCodeのパブリックプロパティを表示します。

バーコードまたはコレクションの変更は、DataGridに反映されます(DataGridプロパティに応じて変更されます)。

関連する問題