0

Я хочу связать combox с моей моделью сущностей через службы домена.Переплет Combobox в silverlight Ria Services

Моя сущность модель: СТРАН (ID, NAME) TABLE_TEST (PK_FIELD, FIELD2, COUNTRY_ID)

Я создал модель лица и службу домена.

Мои Xaml:

<riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:COUNTRIES, CreateList=true}" Height="0" Name="COUNTRIESDomainDataSource" QueryName="GetCOUNTRIESQuery" Width="0"> 
     <riaControls:DomainDataSource.DomainContext> 
      <my:DomainService1 /> 
     </riaControls:DomainDataSource.DomainContext> 
    </riaControls:DomainDataSource> 

    <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:TABLE_TEST, CreateList=true}" Height="0" Name="TABLE_TESTDomainDataSource" QueryName="GetTABLE_TESTQuery" Width="0"> 
     <riaControls:DomainDataSource.DomainContext> 
      <my:DomainService1 /> 
     </riaControls:DomainDataSource.DomainContext> 
    </riaControls:DomainDataSource> 

    <ComboBox Name="COUNTRIESComboBox" 
       DataContext="{Binding ElementName=COUNTRIESDomainDataSource, Path=Data}" ItemsSource="{Binding}" 
       DisplayMemberPath="ID" 
       SelectedValuePath="NAME" 
     SelectedValue="{Binding ElementName=TABLE_TESTDomainDataSource, Path=COUNTRY_ID}"> 
    </ComboBox> 

Поле со списком загружается с правильными значениями (все страны), но похоже, что это не ограничена TABLE_TEST. Когда я меняю регистр TABLE_TEST, значение комбо не изменяется.

Что я делаю неправильно? Я посмотрел много примеров, но никто не является тем же самым escenario, с источником данных домена и сущностью.

Я работаю с Silverlight 5

Благодарности

ответ

0

DomainDataSource чрезвычайно плохо подходит в качестве источника данных для Silverlight ComboBoxes. До сих пор я нашел Kyle McClennan's [MSFT] ComboBoxDataSource самым надежным в описанном вами случае использования. На самом деле, он советовал:

1) Не используйте DomainDataSource для заполнения ComboBoxes

Вы можете думаете, что это резкое или более реакция, но я придерживаюсь по рекомендации. Несмотря на простые образцы, которые вы увидите в других местах, Я думаю, что вам лучше избегать DDS при работе с ComboBoxes. DDS не масштабируется для более сложных сценариев ComboBox .

В частности, необходимо отметить свой выпадающий как Async в конечном атрибут .

<ComboBox Name="COUNTRIESComboBox" 
      DataContext="{Binding ElementName=COUNTRIESDomainDataSource, Path=Data}" ItemsSource="{Binding}" 
      DisplayMemberPath="ID" 
      SelectedValuePath="NAME" 
      SelectedValue="{Binding ElementName=TABLE_TESTDomainDataSource, Path=COUNTRY_ID}" 
      ex:ComboBox.Mode="Async"> 
</ComboBox> 
+0

Этот пример не относится ко мне. Хорошо, он описывает ту же ситуацию, но он использует персонализированный combobox, который я не хочу. Я не могу поверить, что Silverlight не имеет решения этой проблемы без реализации моего собственного расширения combobox ... – nachovall

+1

Это стандартная combobox. Основная причина, по которой возникают проблемы, заключается в том, что DomainDataSource является асинхронным и может завершить загрузку ItemsSource после того, как выбран параметр SelectedValue. В результате вы теряете свой SelectedValue. Если вы не хотите использовать расширения, убедитесь, что сначала загружен источник itemss, а затем установите выбранное значение. Это то, что делает расширение. –

+0

Кстати, я полностью согласен с вашими чувствами. Silverlight - слишком низкий уровень, и ему нужны годы полировки или инструментарий для сторонних разработчиков, чтобы сделать его полезным для быстрой разработки LOB. –

Смежные вопросы