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コントロール内には、依存関係プロパティを更新する場所が 1 つだけあります。

BindingExpression expressionObject = GetBindingExpression(SelectedObjectProperty);
if (expressionObject != null)
{
    expressionObject.UpdateSource();
}

このコードは、LostFocusイベントで呼び出されます。

問題は:メソッドが 1 回だけ呼び出されている間UpdateSource(デバッガーでチェック) SelectedItem、更新された値 (同じ) を 2 回取得することです! こんなはずではないので、現在途方に暮れています。何か不足していますか?

編集: MVVM フレームワークは使用していません。VS2012 デバッグ コールスタックは、最初の更新が UpdateSource() 呼び出しによって開始されることを示していますが、2 番目はどこからともなく出てきます。

4

0 に答える 0