我有一个像这样的数据网格:
<dg:DataGrid Name="dg" AutoGenerateColumns="False" CanUserDeleteRows="True">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="Product Code" x:Name="columnProductCode" Binding="{Binding Path=Product.ProductCode}" IsReadOnly="True" ></dg:DataGridTextColumn>
<dg:DataGridTextColumn Header="Product Name" x:Name="columnProductName" Binding="{Binding Path=Product.Name}" IsReadOnly="True" ></dg:DataGridTextColumn>
<dg:DataGridTextColumn Header="ProductMeasure" x:Name="columnDonViTinh" Binding="{Binding Path=Product.Measure IsReadOnly="True"></dg:DataGridTextColumn>
<dg:DataGridTextColumn Header="Quantity" x:Name="ColumnQuantity" Binding="{Binding Path=Quantity IsReadOnly="False"></dg:DataGridTextColumn>
</dg:DataGrid.Columns>
</dg:DataGrid>
在后面的代码中,我有一个像这样的结构:
private struct ProductDetail
{
public TProduct Product { get; set ; } // TProduct is a class provied by a web service
public int Quantity { get; set; }
}
和这样的列表:
private IList<ProductDetail> bs = new List<ProductDetail>();
我曾尝试将数据填充到“bs”。和这样绑定:
this.dg.ItemsSource = this.bs;
一切都好。我可以插入一个新行,删除行,但是当我尝试修改列数量时,然后单击datagrid的标题(到度假村) - &gt;数量列更改为它之前。
如何解决此问题。 谢谢高级。
答案 0 :(得分:4)
在数据网格上,必须指定在更改属性时数据发生更改,而不是保留单元格。为此,您将UpdateSourceTrigger=PropertyChanged
添加到绑定中,然后它应该可以正常工作。您的DataGrid现在看起来像这样:
<dg:DataGrid Name="dg" AutoGenerateColumns="False" CanUserDeleteRows="True">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="Product Code"
x:Name="columnProductCode"
Binding="{Binding Path=Product.ProductCode, UpdateSourceTrigger=PropertyChanged}"
IsReadOnly="True" >
</dg:DataGridTextColumn>
<dg:DataGridTextColumn Header="Product Name"
x:Name="columnProductName"
Binding="{Binding Path=Product.Name, UpdateSourceTrigger=PropertyChanged}"
IsReadOnly="True" >
</dg:DataGridTextColumn>
<dg:DataGridTextColumn Header="ProductMeasure"
x:Name="columnDonViTinh"
Binding="{Binding Path=Product.Measure, UpdateSourceTrigger=PropertyChanged}"
IsReadOnly="True">
</dg:DataGridTextColumn>
<dg:DataGridTextColumn Header="Quantity"
x:Name="ColumnQuantity"
Binding="{Binding Path=Quantity, UpdateSourceTrigger=PropertyChanged}"
IsReadOnly="False">
</dg:DataGridTextColumn>
</dg:DataGrid.Columns>
</dg:DataGrid>
答案 1 :(得分:1)
我不知道DataGrid的完整API,但我认为您必须在将更改推送回底层对象之前提交更改。 Looking at the docs看起来直到更改单元格或按Enter键才会提交编辑。如果在执行这些操作之前进行排序,则可能会取消编辑。
答案 2 :(得分:1)
好的,我已经尝试定义一个类(也有TProduct和Quantity属性)而不是当前的struct。并且...它的工作原理=。=
private class ProductDetail
{
public TProduct Product { get; set ; } // TProduct is a class provied by a web service
public int Quantity { get; set; }
}