我对Data binding& amp; XAML,所以这可能是相当简单的事情,但我已经被困在它上好几天了(并且在这一点上比我可以跟踪更多的谷歌搜索感到沮丧)并且会欣赏正确方向的任何指针。我唯一的选择是尽可能将它保留在纯XAML中。
在我的RIA SL4项目中,我有两个实体PackageOS
和OS
,其中PackageOS
与OS
到PackageOS.OS
有关联(通过{{关联) 1}}< - > PackageOS.OSID
- 以及OS.ID
+ [Include]
在相关部分正确设置)
这是模板(在.Include()
部分中定义以及所有其他涉及的DDS)我在DataForm中使用Page.Resource
List绑定到OSEntities
实体(来自RIA) PackageOS
使用DDS):
GetOSEntities()
核心问题是<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>
的{{1}}无效。所有绑定都可以从IDE Binding向导访问,因此我输入错误的路径不是问题。我可以看到SelectedItem
属于ComboBox
类型。
如果我在后端数据库中创建一个手动条目,结果会显示在packageOSEntityDomainDataSource.Data.CurrentItem
文本块中,所以我知道它已正确返回但是PackageOS
拒绝接收它(它最终会选择第一个无论PackageOS.OS
中的SelectedItem
项是什么,下拉列表中的值。
非常感谢提前!
答案 0 :(得分:2)
终于弄明白了。留下我的回答,希望能节省别人花在这上面的时间。
第一课
问题在于我没有生成实体的自定义Equality实现,并且默认引用相等不起作用,因为我使用了两个不同的实例。一旦我在生成的实体上实现IEquatable
(通过服务器端的.shared.cs部分类),一切都开始像魅力一样。
有关详细信息,请参阅Silverlight ComboBox Control Population by Manishdalal
第二课 如果可以帮助,请不要使用多个DDS控件。特别是在DDS上使用写入操作后,在提交更改之前,无法加载/刷新共享DomainContext的任何其他DDS。上面的链接显示了如何通过使用列表生成器来避免多个DDS,只需要选择要填充ComboBox的实体列表。
我的新代码如下:
<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
属性返回{{1}}的位置
第三课 在DDS DataTemplate中,您必须明确使用TwoWay绑定。这是新的行为;由于我提到的大部分教程都使用SL3而且我没有意识到这是SL4中DDS DataTemplate行为的一个重大变化。