如何将子列表或数组绑定到datagrid?

时间:2011-11-08 17:02:49

标签: c# wpf data-binding

我是WPF的新手,仍然试图掌握WPF控件的Binding方面。让我先介绍一下我正在使用的代码&然后我会提出问题。

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>

问题

当我执行此代码时,我能够将DocumentId成功绑定到网格,但条形码列表似乎没有正确绑定。我已经确认列表中有数据。我做错了什么?

1 个答案:

答案 0 :(得分:2)

在这些情况下使用的常用模式是为BarCode对象实现INotifyPropertyChanged,并使用ObservableCollection将它们公开给DataGridControl。然后,DataGrid将每行显示一个Barcode对象,每列显示BarCode的公共属性。

条形码或集合中的更改将传播到DataGrid,反之亦然(取决于DataGrid属性)。