Silverlight儿童窗口组合框查找

Silverlight儿童窗口组合框查找,silverlight,data-binding,silverlight-4.0,combobox,wcf-ria-services,Silverlight,Data Binding,Silverlight 4.0,Combobox,Wcf Ria Services,我正在用silverlight尽我最大的努力,但对于简单的任务,我总是会遇到障碍。我的主窗体上有一个列出地址的主数据网格。然后,我有一个子窗口,允许用户使用一个组合框编辑这些地址,该组合框用于查找国家/地区。我有一个AddressDomainDataSource和一个CountryDomainDataSource。 我的子窗口中有一个组合框,代码如下: <riaControls:DomainDataSource AutoLoad="True" d:DesignData="

我正在用silverlight尽我最大的努力,但对于简单的任务,我总是会遇到障碍。我的主窗体上有一个列出地址的主数据网格。然后,我有一个子窗口,允许用户使用一个组合框编辑这些地址,该组合框用于查找国家/地区。我有一个AddressDomainDataSource和一个CountryDomainDataSource。 我的子窗口中有一个组合框,代码如下:

         <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:Country, CreateList=true}" Height="0" Name="CountryDomainDataSource" QueryName="GetCountriesQuery" Width="0">
        <riaControls:DomainDataSource.DomainContext>
            <my:CountriesContext />
        </riaControls:DomainDataSource.DomainContext>
    </riaControls:DomainDataSource>


    <riaControls:DomainDataSource AutoLoad="False" d:DesignData="{d:DesignInstance my:Address, CreateList=true}" Height="0" Name="AddressDomainDataSource" QueryName="GetAddressQuery" Width="0" LoadDelay="10000">
        <riaControls:DomainDataSource.DomainContext>
            <my:AddressContext />
        </riaControls:DomainDataSource.DomainContext>
        <riaControls:DomainDataSource.QueryParameters>
            <riaControls:Parameter ParameterName="intAddressID" />
        </riaControls:DomainDataSource.QueryParameters>
    </riaControls:DomainDataSource>



    <Grid DataContext="{Binding ElementName=AddressDomainDataSource, Path=Data}" HorizontalAlignment="Left" Margin="63,27,0,0" Name="Grid1" VerticalAlignment="Top">

当我更改为列表中的其他项目时,这会正确地回写,但在启动时,它总是替换为CountryDomainDataSource列表中的第一个项目。我已经在我的web.g.vb代码上设置了一个断点,看起来intCountryID在启动时设置正确,但在返回它之后,它会被列表中的第一个值覆盖。我还没有编写任何代码将此值设置为CountryDomainDataSource列表中的第一个值?似乎在CountryDomainDataSource_LoadedData事件完成后,它会在那里设置countryid。是否有必要先加载我的CountryDomainDatasource,然后再加载我的AddressDomainDatasource,或者我在这里做了一些愚蠢的或错误的事情,因为我已经为此挠头一段时间了

任何帮助都将不胜感激

感谢设置AddressDomainDatasource上的
AutoLoad=“False”
以停止自动加载,并从CountryDomainDataSource\u LoadedData事件触发AddressDomainDatasource的
Load()


或者您可以只设置AddressDomainDatasource的地址(可能是一个更简单的选项)。

当DDS成功加载数据时,它将选择列表中的第一项。出于这个原因(以及其他原因),我建议您不要使用它来填充组合框。下面是Jeff和我共同撰写的几篇文章,解释了理由和更好的选择


我已经试过了,但仍然是先加载地址。可能是因为我将网格数据上下文绑定到AddressDomainDataSource。下面是我的代码示例:很抱歉,我在上面发布了代码,因为我无法将其放在下面。此外,loadDelay似乎不起作用。还有其他想法吗?谢谢你们的帮助,我进一步检查了一下,发现我的错误是我先在别的地方加载,所以我按照你们的想法,从CountryDomainDataSource_LoadedData触发了AddressDomainDatasource的加载,效果非常好。Cheers我按照你的建议使用了ComboBoxExtension,尽管我似乎在域上下文和异步和异步模式方面遇到了一些问题。如果我在AsyncEarge中运行,我只会得到单个ID查找值。如果我以异步方式运行,我将一无所获。所以我不确定这是否与共享域上下文有关。我在打开时将子窗口上网格的DataContext设置为等于父窗口datagrid中当前选定的实体项。然后在childwindow.Resources中声明CountryContext查找,然后将ComboBoxDataSource放在我的combo的正上方。现在您提到了共享DomainContext。我该怎么办?我有点困惑。再次感谢您在运行此程序时,我在代码上放置了一个断点,它似乎没有在我的DomainService中调用我的OperationName。是否应该在表单启动时运行此操作?谢谢,第一个链接展示了如何共享DomainContext实例。通常,在页面资源中创建一个实例,并将其传递给所有数据源。第三个链接深入讨论了“Async”和“AsyncEarge”模式可能出现的问题。如果您有更多问题,请随时通过博客与我联系。与Kyle交谈后,有一些事情需要注意。首先,决不能同时使用SelectedItem和SelectedValue绑定。另一个我永远不会得到的因素是,你必须把ComboBox.Mode放在标记的末尾。希望这对别人有帮助