我在 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
事件上调用。
问题是: whileUpdateSource
方法只被调用一次(用调试器检查)SelectedItem
获得更新值(相同)两次!我目前处于亏损状态,因为它不应该是这样的。我错过了什么吗?
编辑:我没有使用任何 MVVM 框架。VS2012 调试调用堆栈显示第一次更新是由 UpdateSource() 调用发起的,但第二次更新突然出现。