我是数据绑定和XAML的新手,所以这可能是一件相当简单的事情,但我已经被它难住了好几天(并且对更多的googling搜索感到沮丧,目前我无法跟踪),如果有任何正确方向的指导,我将不胜感激。如果可能的话,我唯一的偏好是将它保存在纯XAML中。
在我的RIA SL4项目中,我有两个实体PackageOS和OS,其中PackageOS通过PackageOS.OS与OS关联(通过PackageOS.OSID <-> OS.ID -和[Include] + .Include()在相关部分正确设置关联)
这是我在DataForm中使用的模板(在Page.Resource小节中定义),用于将OSEntities列表绑定到PackageOS实体(来自使用DDS的RIA 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>核心问题是ComboBox的SelectedItem不工作。所有的绑定都可以通过IDE绑定向导访问,所以这不是我输入错误路径的问题。我可以看到packageOSEntityDomainDataSource.Data.CurrentItem的类型是PackageOS。
如果我在后端数据库中创建一个手动条目,结果会显示在PackageOS.OS文本块中,所以我知道它是正确返回的,但SelectedItem拒绝提取它(它最终选择了下拉列表中的第一个值,而不管PackageOS中的OS项)。
首先要感谢大家!
发布于 2011-02-22 01:01:06
终于想明白了。留下我的答案,希望这能为别人节省我花在这上面的时间。
第一课问题在于,我没有为生成的实体提供自定义的相等实现,默认的引用相等不起作用,因为我使用了两个不同的实例。一旦我在我生成的实体上实现了IEquatable (通过服务器端的.shared.cs分部类),一切都开始出色地工作起来。
有关详情,请参阅Silverlight ComboBox Control Population by Manishdalal
DDS Second lesson不要使用多个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>加载后通过其OSList属性返回一个DomainContext
第三课在DDS DataTemplate中,你必须明确使用TwoWay绑定。这就是新的行为;我花了几天的时间才弄明白,因为我提到的大多数教程都在使用SL3,而我并没有意识到这是SL4中DDS DataTemplate行为的一个突破性变化。
https://stackoverflow.com/questions/5018784
复制相似问题