将多个DomainDataSource绑定到RadGridView选择更改的最佳方法

时间:2012-05-23 09:51:17

标签: silverlight binding wcf-ria-services radgridview query-parameters

我有一个主网格,用于查找项目,然后是一组3个网格,使用简单的名称值对显示所选行的相关详细信息的并行集合。

看起来像这样:

enter image description here

当我断开域服务时,所选行的参数会正确传递给它,但子网格显示的条目与返回的数据无关。

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之一的示例是:

            <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对象之一的示例是:

    <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的值,如下所示: enter image description here

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();
        }
    }

当我将交叉绑定替换为网格选择时,如上所示,在3个单独的域上下文中进行3次单独的加载调用,它可以正常工作。问题似乎是将DomainDataSource参数绑定到Grid上的选择更改。

有什么想法吗?

0 个答案:

没有答案