数据绑定到DomainDataSource查询参数

时间:2009-11-10 20:17:38

标签: silverlight-3.0 domaindatasource

我需要将用户名绑定到DomainDataSource QueryParameter。我的理解是以下不起作用:

<RiaControls:DomainDataSource x:Name="MyData" LoadSize="20" QueryName="GetStockByCompany" AutoLoad="True">

    <RiaControls:DomainDataSource.DomainContext>
        <ds:InventoryDomainContext  />
    </RiaControls:DomainDataSource.DomainContext>

    <RiaControls:DomainDataSource.QueryParameters>
        <riadata:Parameter 
            ParameterName="userName" 
            Value="{Binding Path=User.Name}" />
    </RiaControls:DomainDataSource.QueryParameters>

</RiaControls:DomainDataSource>

我不反对使用页面的C#代码隐藏部分,但我不确定将此内容放入哪个事件。

到目前为止,我已经尝试过这个:

public Inventory()
{
    InitializeComponent();
    Loaded += Inventory_Loaded;
}
private void Inventory_Loaded(object sender, RoutedEventArgs e)
{
   this.MyData.QueryParameters.Add(new Parameter { ParameterName = "userID", Value = RiaContext.Current.User.Name});
}

但是由于InitializeComponent()首先触发,并且导致数据丢失,导致DomainDataSource因查询没有任何参数运行而轰炸...它不起作用。

接下来我尝试了这个......

[xaml档案]

<RiaControls:DomainDataSource x:Name="MyData" LoadSize="20" QueryName="GetStockByCompany" AutoLoad="True" LoadingData="MyData_LoadingData">

[cs file]

private void MyData_LoadingData(object sender, LoadingDataEventArgs e)
{
   this.MyData.QueryParameters.Add(new Parameter { ParameterName = "userID", Value = RiaContext.Current.User.Name});
}

不幸的是,该事件从未被解雇。我不确定为什么。

我甚至试过这个: [xaml文件]

<RiaControls:DomainDataSource x:Name="MyData" LoadSize="20" QueryName="GetStockByCompany" AutoLoad="True" LoadedData="MyData_LoadedData">

[cs file]

private void MyData_LoadedData(object sender, LoadedDataEventArgs e)
{
   this.MyData.QueryParameters.Add(new Parameter { ParameterName = "userID", Value = RiaContext.Current.User.Name});
}

但那只是愚蠢。

我很茫然。如何在页面加载时使用参数加载此查询?

谢谢!

2 个答案:

答案 0 :(得分:3)

嗯,我不是你问题的具体答案,但我可能知道完全避免这种情况的方法。

我注意到你有一个名为“GetStockByCompany”的方法接受当前登录的用户作为参数......

您可以完全删除对参数的需求,而在服务器端查询“GetStockByCompany”在“Where”部分中使用它:

this.ServiceContext.User.Identity.Name

Ex - 获取当前登录用户的所有相册:

album = this.Context.AlbumSet
            .Where(n => n.AlbumId == AlbumId)
            .Where(n => n.aspnet_Users.UserName == this.ServiceContext.User.Identity.Name)
            .First();

答案 1 :(得分:0)

绑定查询参数有效,典型用法是将其直接绑定到控件。

要在代码后面设置参数,请为参数指定名称并设置value属性。没有必要在代码中添加整个参数。