0

我在 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() 调用发起的,但第二次更新突然出现。

4

0 回答 0