Наконец-то понял это.Оставив свой ответ в надежде, что это сэкономит кому-то еще время, которое я потратил на это.
Первый урок Проблема заключалась в том, что у меня не было пользовательской реализации Equality для сгенерированногосущности и равенство ссылок по умолчанию не работали, так как я использовал два разных экземпляра.Как только я реализовал IEquatable
на своих сгенерированных сущностях (через частичные классы .shared.cs на стороне сервера), все стало работать как чудо.
Подробнее см. Управление заполнением Silverlight ComboBox от Manishdalal
Второй урок Не используйте несколько элементов управления DDS, если можете помочь.Особенно когда вы используете операцию записи в DDS, вы не можете загружать / обновлять любые другие DDS, которые совместно используют DomainContext, пока изменения не будут приняты.Приведенная выше ссылка показывает, как избежать нескольких 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
Третий урок В DataSemplate DDS вы должны быть явными с TwoWay Binding.Это новое поведение;На это у меня ушло несколько дней, так как большинство учебных пособий, на которые я ссылался, использовали SL3, и я не осознавал, что это было принципиальное изменение в поведении DDS DataTemplate в SL4.