2011-01-06 2 views
0

Я использую службы RIA для обслуживания объектов в приложении Silverlight с поддержкой MVVM-Light.Повторный заказ Silverlight Listbox - MVVM-stylee

У меня есть ViewModel, который представляет CollectionViewSource объектов в список в представлении. Причина, по которой я использую CollectionViewSource, заключается в том, что я могу управлять выбранным элементом в ViewModel; когда создается новый элемент, я могу его создать, а затем выбрать его для дальнейшего редактирования (выбор элемента в списке позволяет редактировать этот элемент в форме данных).

Мне нужно включить перетаскивание для списка, чтобы разрешить переупорядочивание элементов. Я рассмотрел использование ListBoxDragDropTarget из Silverlight Toolkit для включения этой функции, но это не сработало - я предполагаю, что это связано с тем, что мне нужно установить список ItemsSource в ObservableCollection.

Если я изменил CollectionViewSource в ViewModel на ObservableCollection, как я могу программным образом изменить выбранный элемент списка из ViewModel?

Любые идеи?

ответ

0

Вы можете обернуть ObservableCollection<T> в CollectionViewSource ... как видно here ... так, что подложка сбор данных, используемых CollectionViewSource, на основе поведения INotifyCollectionChanged без потери преимуществ от CollectionViewSource; которые вам нужны для выбора элемента.

<UserControl.Resources> 
     <local:DataSource x:Key="dataSource" /> 
      <CollectionViewSource x:Name="cvs" 
        Source="{Binding Names, Source={StaticResource dataSource}}"> 
      </CollectionViewSource> 
    </UserControl.Resources> 

    ... 

    <ListBox ItemsSource="{Binding Source={StaticResource cvs}}" 
       Margin="5,5,5,1" Grid.ColumnSpan="4" /> 

Конец Конец примера от Tim Heuer можно найти here, который должен также помочь вам в достижении полного решения.

+0

Спасибо Аарону, я отдам это. – Drammy

+0

На самом деле получается, что я не могу предложить ни один из предложенных здесь методов для работы с шаблоном MVVM, похоже, что это может быть ошибка с ListBoxDragDropTarget ... – Drammy

+0

@Drammy Проверьте это ... http: //silverlightfeeds.com/post /1325/Silverlight_Toolkit_adds_DragDrop_targets.aspx, поскольку у него есть пример конца ... –

1

Вы можете иметь отдельное свойство в вашем ViewModel, а именно SelectedThing и привязать к нему ListBox.SelectedItem

<ListBox ItemsSource="{Binding TheCollection}" SelectedItem="{Binding SelectedThing}" /> 
+0

Спасибо, альфа-мышь. Я уже пробовал этот подход, но я, должно быть, сделал что-то не так, потому что не работал, как хотел. Если бы я начинал заново, я бы пошел с этим путем. Но предложение Аарона означает меньше работы ... (это просто ленивость?) – Drammy

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