アイテムの検索に使用されるマスター グリッドがあり、その下に 3 つのグリッドのセットがあり、単純な名前と値のペアを使用して、選択した行の関連する詳細の並列セットを表示します。
次のようになります。
ドメイン サービスをブレークポイントすると、選択した行のパラメーターは正しく渡されますが、返されたデータに関係のないエントリが子グリッドに表示されます。
3 つのドメイン サービス メソッドのいずれかのデバッグ バージョンは次のようになります。
public IEnumerable<NameValuePair> GetRandNameValues(int randId)
{
// If I breakpoint here the values in randId are
// correct for the selected master row
List<NameValuePair> result = new List<NameValuePair>();
result.Add(new NameValuePair("[ID]", randId.ToString()));
...
return result;
}
3 つの子 RadGridViews の 1 つの例は次のとおりです。
<telerik:RadGridView Grid.Row="1" Grid.Column="2" HorizontalAlignment="Stretch" Name="randGridView" VerticalAlignment="Stretch" ShowGroupPanel="False" RowIndicatorVisibility="Collapsed"
ItemsSource="{Binding ElementName=randDataSource, Path=Data}" AutoGenerateColumns="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Name" DataMemberBinding="{Binding Name}" IsReadOnly="True" Width="*" />
<telerik:GridViewDataColumn Header="Value" DataMemberBinding="{Binding Value}" IsReadOnly="True" Width="*" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
3 つの子 DomainDataSource オブジェクトの 1 つの例は次のとおりです。
<riaControls:DomainDataSource Name="randDataSource" Height="0" Width="0"
QueryName="GetRandNameValuesQuery">
<riaControls:DomainDataSource.DomainContext>
<my:RandDomainContext />
</riaControls:DomainDataSource.DomainContext>
<riaControls:DomainDataSource.QueryParameters>
<riaControls:Parameter ParameterName="randId"
Value="{Binding ElementName=masterGridView, Path=SelectedItem.Rand_ID}"/>
</riaControls:DomainDataSource.QueryParameters>
</riaControls:DomainDataSource>
このテストケースでは、渡されたキー値を返す必要がありますが、次のように常に 0 の値が表示されます。
0 は、何も選択されていない最初のケースからのものです。詳細グリッドの他の行は変更されますが、正しいレコードにはなりません。実際、それらは、いくつかのマスター行に関連する小さなセットの値の間で交互に表示されるように見えます....奇妙です。
DomainService は正しいキーで正しいタイミングで呼び出されていますが、戻り値が正しくありません。
子グリッドの更新をトリガーするのは何ですか? 私は何が欠けていますか?すべての行ではなく一部の行に古いデータが表示されるのはなぜですか?
アップデート:
データソースにイベントのハンドラーを追加し、LoadedData
それをブレークポイントすると、その中のエンティティが間違った値であることがわかりました...つまり、ドメインサービスが選択したものではありません:
private void randDataSource_LoadedData(object sender, LoadedDataEventArgs e)
{
if (e.HasError)
{
System.Windows.MessageBox.Show(e.Error.ToString(), "Rand Load Error", System.Windows.MessageBoxButton.OK);
e.MarkErrorAsHandled();
}
}
上記の Grid 選択へのクロス バインディングを、3 つの個別のドメイン コンテキストでの 3 つの個別のロード コールに置き換えると、正常に動作します。問題は、DomainDataSource パラメータをグリッドの選択変更にバインドすることにあるようです。
何か案は?