【问题标题】:Silverlight childwindow combobox lookupSilverlight 子窗口组合框查找
【发布时间】:2011-07-01 13:45:57
【问题描述】:

我正在尽我最大的努力使用 silverlight,但在简单的任务中总是遇到障碍。我的主表单上有一个列出地址的主数据网格。然后,我有一个子窗口,允许用户使用一个可以查询国家/地区的组合框来编辑这些地址。我有一个 AdreessDomainDataSource 和一个 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,还是我在这里做了一些愚蠢或错误的事情,因为我已经为此挠头了一段时间?

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: silverlight data-binding silverlight-4.0 combobox wcf-ria-services


    【解决方案1】:

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

    【讨论】:

    • 我听从了您的建议并使用了您的 ComboBoxExtension,尽管我的 Domaincontexts 以及 Async 和 AsyncEager 模式似乎遇到了一些问题。如果我在 AsyncEager 中运行,我只会得到单个 ID 查找值。如果我在异步中运行,我什么也得不到。所以我不确定它是否与共享 DomainContexts 有关。我将子窗口上 Grid 的 DataContext 设置为等于打开时父窗口数据网格中当前选定的实体项。
    • 然后我在 childwindow.Resources 中声明 CountryContext 查找,然后将 ComboBoxDataSource 放在我的组合上方。现在您提到了共享 DomainContext。我该怎么办?我有点困惑。再次感谢
    • 在运行它时,我在我的代码上放置了一个断点,它似乎没有在我的 DomainService 中调用我的 OperationName。这应该在表单启动时运行吗?谢谢,奥利
    • 第一个链接显示了如何共享 DomainContext 实例。通常,您在页面资源中创建一个实例并将其传递给所有数据源。第三个链接深入探讨了您可能会在“异步”和“AsyncEager”模式下看到的问题。如果您有更多问题,请随时通过博客与我联系。
    • 与凯尔交谈后,有几点需要注意。首先,您不应该同时使用 SelectedItem 和 SelectedValue 绑定。我永远不会得到的另一个因素是您必须将 ComboBox.Mode 放在标记的末尾。希望这可以帮助某人
    【解决方案2】:

    在 AddressDomainDatasource 上设置 AutoLoad="False" 以停止其自动加载并从 CountryDomainDataSource_LoadedData 事件触发 AddressDomainDatasource 的 Load()

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

    【讨论】:

    • 我已经尝试过了,它仍然首先加载地址。是否可能是因为我将网格数据上下文绑定到 AddressDomainDataSource。我的代码示例如下:
    • 对不起,我在上面发布了代码,因为我无法将它放在下面。 loadDelay 似乎也不起作用。还有其他想法吗?感谢您的帮助
    • 我进一步检查,我发现我的错误是我首先在其他地方加载,所以我按照你的想法触发了来自 CountryDomainDataSource_LoadedData 的 AddressDomainDatasource 的加载,效果很好。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多