首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨DomainDataSource组合框SelectedItem绑定

跨DomainDataSource组合框SelectedItem绑定
EN

Stack Overflow用户
提问于 2011-02-17 00:04:08
回答 1查看 1.1K关注 0票数 4

我是数据绑定和XAML的新手,所以这可能是一件相当简单的事情,但我已经被它难住了好几天(并且对更多的googling搜索感到沮丧,目前我无法跟踪),如果有任何正确方向的指导,我将不胜感激。如果可能的话,我唯一的偏好是将它保存在纯XAML中。

在我的RIA SL4项目中,我有两个实体PackageOSOS,其中PackageOS通过PackageOS.OSOS关联(通过PackageOS.OSID <-> OS.ID -和[Include] + .Include()在相关部分正确设置关联)

这是我在DataForm中使用的模板(在Page.Resource小节中定义),用于将OSEntities列表绑定到PackageOS实体(来自使用DDS的RIA GetOSEntities() ):

代码语言:javascript
复制
<DataTemplate x:Key="POSItemTemplate">
    <StackPanel>
        <toolkit:DataField Label="PackageOS.OS">
            <TextBlock Text="{Binding Source={StaticResource packageOSEntityDomainDataSource}, Path=Data.CurrentItem.OS}" />
        </toolkit:DataField>
        <toolkit:DataField Label="OS">
            <ComboBox ItemsSource="{Binding Path=Data, Source={StaticResource osEntityDomainDataSource}}"
                      SelectedItem="{Binding Path=Data.CurrentItem.OS, Source={StaticResource packageOSEntityDomainDataSource}}"/>
        </toolkit:DataField>
    </StackPanel>
</DataTemplate>

核心问题是ComboBoxSelectedItem不工作。所有的绑定都可以通过IDE绑定向导访问,所以这不是我输入错误路径的问题。我可以看到packageOSEntityDomainDataSource.Data.CurrentItem的类型是PackageOS

如果我在后端数据库中创建一个手动条目,结果会显示在PackageOS.OS文本块中,所以我知道它是正确返回的,但SelectedItem拒绝提取它(它最终选择了下拉列表中的第一个值,而不管PackageOS中的OS项)。

首先要感谢大家!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-22 01:01:06

终于想明白了。留下我的答案,希望这能为别人节省我花在这上面的时间。

第一课问题在于,我没有为生成的实体提供自定义的相等实现,默认的引用相等不起作用,因为我使用了两个不同的实例。一旦我在我生成的实体上实现了IEquatable (通过服务器端的.shared.cs分部类),一切都开始出色地工作起来。

有关详情,请参阅Silverlight ComboBox Control Population by Manishdalal

DDS Second lesson不要使用多个DDS控件,如果可以的话。尤其是当您在一个DDS上使用写操作时,在提交更改之前,您不能加载/刷新任何其他共享该DomainContext的DDS。上面的链接展示了如何通过使用列表生成器来避免多个ComboBox,而您所需要的只是拾取实体列表来填充DDS。

我的新代码如下所示:

代码语言:javascript
复制
<DataTemplate x:Key="POSItemTemplate">
    <StackPanel d:DataContext="{Binding Source=packageOSDomainDataSource, Path=Data.CurrentItem}">
        <toolkit:DataField Label="OS">
            <ComboBox DisplayMemberPath="Name"
                      ItemsSource="{Binding Path=OSList, Source={StaticResource OSListGenerator}}"
                      SelectedItem="{Binding Path=OS, Mode=TwoWay}" />
        </toolkit:DataField>
    </StackPanel>
</DataTemplate>

其中,OSListGenerator在从IEnumerable<OSEntity>加载后通过其OSList属性返回一个DomainContext

第三课在DDS DataTemplate中,你必须明确使用TwoWay绑定。这就是新的行为;我花了几天的时间才弄明白,因为我提到的大多数教程都在使用SL3,而我并没有意识到这是SL4中DDS DataTemplate行为的一个突破性变化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5018784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档