我正在修改使用Grid_CellEditEnding
的旧代码-我修改了网格以使用自定义控件:
<DataGridTemplateColumn x:Name="cellQty" Header="Qty" Width="1.1*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Resources:NumericTextColumn Text="{Binding Qty}" >
</Resources:NumericTextColumn>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Resources:NumericTextColumn Text="{Binding Qty}" >
</Resources:NumericTextColumn>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
一旦单元事件触发,我就试图获取对象的值,但是很难转换对象(获取表示框架错误)
private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if(e.Column.Header.ToString().Equals("Qty"))
{
//this is in error
var newQuantityText = ((NumericTextColumn)e.EditingElement).Text;
}
}
答案 0 :(得分:1)
我使用了该行的DataContext
属性,并使用Class Type进行了强制转换以获得Property。代替数据类,您需要提供具有数量属性的类。
private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if(e.Column.Header.ToString().Equals("Qty"))
{
var d = ((Data)e.Row.DataContext).Qty;
}
}
更新的答案
为了获得当前输入的数据,请在网格行中。
private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if(e.Column.Header.ToString().Equals("Qty"))
{
var NumericDataCtrl= GetVisualChild<NumericTextColumn>(e.EditingElement);
var data = NumericDataCtrl.Text;
}
}
要访问EditingElement内部的子控件,我使用了以下方法
public static T GetVisualChild<T>(Visual parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>
(v);
}
if (child != null)
{
break;
}
}
return child;
}