silverlight - 跨域数据源组合框 SelectedItem 绑定(bind)

标签 silverlight xaml data-binding

我对数据绑定(bind)和 XAML 还很陌生,所以这可能是相当简单的事情,但我已经被它难住了好几天了(并且对谷歌搜索比我现在可以跟踪的更多感到沮丧)并且希望在正确的方向。我唯一的偏好是尽可能将其保留在纯 XAML 中。

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

这是我在 DataForm 中用来获取 Page.Resource 的模板(在 OSEntities 部分以及所有其他涉及的 DDS 中定义)绑定(bind)到 PackageOS 的列表实体(来自 RIA GetOSEntities() 使用 DDS):

<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>

核心问题是SelectedItemComboBox不管用。所有绑定(bind)都可以从 IDE 绑定(bind)向导访问,所以我输入错误的路径不是问题。我可以看到 packageOSEntityDomainDataSource.Data.CurrentItemPackageOS 类型.

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

提前谢谢了!

最佳答案

终于想通了。留下我的答案,希望它可以节省其他人我花在这上面的时间。

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

详情请见Silverlight ComboBox Control Population by Manishdalal

第二课
如果您能提供帮助,请不要使用多个 DDS 控件。尤其是在 DDS 上使用写入操作后,在提交更改之前,您无法加载/刷新共享 DomainContext 的任何其他 DDS。上面的链接显示了当您只想获取实体列表以填充 ComboBox 时,如何使用列表生成器来避免多个 DDS。

我的新代码如下所示:

<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>通过其OSListDomainContext 加载后的属性

第三课
在 DDS DataTemplate 中,您必须明确使用双向绑定(bind)。这是新的行为;我花了几天时间才弄清楚,因为我提到的大多数教程都使用 SL3,我没有意识到这是 SL4 中 DDS DataTemplate 行为的重大变化。

关于silverlight - 跨域数据源组合框 SelectedItem 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5018784/

相关文章:

c# - 如何改变录制声音的音调?

wpf - 文本框MVVM内的按键

android - 如何使用Databinding android更新editview中的ontextchanged的textview

silverlight - NavigationService.Navigate() 方法和 PhoneApplicationFrame.Source 属性有什么区别?

silverlight - 在不聚焦时保持 Silverlight 文本框选择显示?

c# - 找不到类型或命名空间名称(XAML 新增功能)

.net - 没有完全理解ScrollViewer SnappingPoints

Grails 数据绑定(bind)多个域类

c# - Visual Studio 2010 在非 SL 项目中添加 SL 项目引用导致出现警告图标

xaml - 表达式混合错误 - 值不能为空。参数名称 : stream