我在datagrid DataGridTemplateColumn.CellEditingTemplate
中有自定义控件:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=Items}">
<DataGrid.Columns>
<data:DataGridTemplateColumn Header="Column1" >
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<sdk:Label Content="{Binding Path=Description}"/>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<common:MyControl SelectedObject="{Binding Path=SelectedItem, Mode=TwoWay, UpdateSourceTrigger=Explicit}"/>
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
在控制范围内我只有一个地方可以更新SelectedObject
依赖属性:
BindingExpression expressionObject = GetBindingExpression(SelectedObjectProperty);
if (expressionObject != null)
{
expressionObject.UpdateSource();
}
此代码在LostFocus
事件中调用。
问题是:而UpdateSource
方法只调用一次(使用调试器检查)SelectedItem
获取更新值(相同)两次!我现在处于亏损状态,因为它不应该是这样的。我错过了什么吗?
编辑:我没有使用任何MVVM框架。 VS2012调试callstack显示第一次更新是由UpdateSource()调用启动的,但第二次更新是不可能的。