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 番目はどこからともなく出てきます。