我正在使用RIA Services构建Silverlight应用程序。我想实现主/细节行为。这里的诀窍是“细节”网格不能直接用主网格的“SelectedItem”属性填充,我必须做的是从主网格中获取一个字段并将其用作参数DataService的。绑定将如何?Silverlight Databind到参数化DataService
这是参数化查询代码:
public Usuarios GetUserFromId(int id)
{
return this.ObjectContext.Usuarios.Where(u => u.ID == id).First();
}
而这些都是在XAML来源:
<riaControls:DomainDataSource x:Name="DomainDataSourceRaceTrackGetUsersWithRole" AutoLoad="True" QueryName="GetUsersWithRoleQuery" LoadSize="20">
<riaControls:DomainDataSource.DomainContext>
<App:DomainServiceRaceTrack></App:DomainServiceRaceTrack>
</riaControls:DomainDataSource.DomainContext>
</riaControls:DomainDataSource>
<riaControls:DomainDataSource x:Name="DomainDataSourceRaceTrackGetUserById" AutoLoad="True" QueryName="GetUserFromId">
<riaControls:DomainDataSource.DomainContext>
<App:DomainServiceRaceTrack></App:DomainServiceRaceTrack>
</riaControls:DomainDataSource.DomainContext>
</riaControls:DomainDataSource>
以下是我绑定主电网:
<data:DataGrid x:Name="DataGridUsers" AutoGenerateColumns="False" ItemsSource="{Binding Data, ElementName=DomainDataSourceRaceTrackGetUsersWithRole}">
然后在SelectedItemChanged上我需要填充Detail网格,但是我使用的绑定不起作用:
<dataControls:DataForm x:Name="dataForm1" Height="393" Width="331"
VerticalAlignment="Top"
Header="User Details"
CurrentItem="{Binding DataGridUsers.SelectedItem.Id, ElementName=DomainDataSourceRaceTrackGetUserById}"
HorizontalAlignment="Left" >
<dataControls:DataForm.EditTemplate>
任何人都知道我在做什么错了?我想使用XAML而不是代码隐藏。
谢谢!
我得到一个错误:当AutLoad设置为True和CanLoad设置为False QueryParameters不能改变。有任何想法吗?另外,在第一次加载时,我得到错误加载操作失败,查询'GetUserFromId'。序列不包含任何元素。 有什么建议吗? – brafales 2010-02-01 10:40:23
我认为你在我们的PDC版本中遇到了一些限制,造成了一些令人头痛的问题。当一个现有的负载正在等待时,我们正在阻止负载,并且这种情况非常频繁。 该行为将在我们的下一个版本中得到解决,以便在调用新的加载时,挂起的加载将被取消。 与此同时,您可能必须关闭子数据DomainDataSource的自动加载,侦听主网格上的SelectionChange事件,取消子数据上的任何挂起的加载并调用新的加载。 – 2010-02-03 07:47:27
好的,我会试试看。 感谢这两个答案! – brafales 2010-02-03 21:25:30