我是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成功绑定到网格,但条形码列表似乎没有正确绑定。我已经确认列表中有数据。我做错了什么?
答案 0 :(得分:2)
在这些情况下使用的常用模式是为BarCode对象实现INotifyPropertyChanged,并使用ObservableCollection将它们公开给DataGridControl。然后,DataGrid将每行显示一个Barcode对象,每列显示BarCode的公共属性。
条形码或集合中的更改将传播到DataGrid,反之亦然(取决于DataGrid属性)。