2011-01-06 12 views
0

RIAサービスを使用して、エンティティをMVVM-Light対応のSilverlightアプリケーションに提供しています。Silverlightリストボックスの並べ替え - MVVM-stylee

私はビューのリストボックスにエンティティのCollectionViewSourceを提示するViewModelを持っています。 CollectionViewSourceを使用する理由は、ViewModelで選択した項目を制御できるためです。新しいアイテムが作成されると、それを作成してそれを選択してさらに編集することができます(リストボックス内のアイテムを選択すると、そのアイテムをデータフォームで編集できます)。

アイテムの並べ替えを許可するために、リストボックスのドラッグドロップを有効にする必要があります。私はこの機能を有効にするためにSilverlight ToolkitのListBoxDragDropTargetを使ってみましたが、うまくいきません - これはリストボックスItemsSourceをObservableCollectionに設定する必要があるためです。

ViewModelのCollectionViewSourceをObservableCollectionに変更すると、リストボックスのSelected ItemをViewModelからプログラムで変更できますか?

アイデア?

答えて

0

ListBox.SelectedItemをバインドすることができますCollectionViewSource ...内ObservableCollection<T>それは裏があるように... hereを見られるように、 CollectionViewSourceINotifyCollectionChangedの動作を取得することによって使用されるデータの収集は、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" /> 

ティム・ホイヤーから例をエンドツーエンドでも完全なソリューションを達成するためにあなたを助ける必要があるhereを見つけることができます。

+0

アロンに感謝します。 – Drammy

+0

実際には、MVVMパターンで動作するようにここに示唆されているどちらのアプローチも得られませんが、ListBoxDragDropTargetのバグかもしれません。 – Drammy

+0

@Drammyこれをチェックしてください... http://silverlightfeeds.com/post /1325/Silverlight_Toolkit_adds_DragDrop_targets.aspxこれは終わりから終わりの例を持っています... –

1

はあなたのViewModelすなわちSelectedThingで別のプロパティを持っているとあなたがラップすることができ、それ

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

アルファ - マウスありがとうございました - 私は実際にこのアプローチを試みましたが、私はそれが私が欲しかったように働かせなかったので、間違ったことをしているに違いありません。もし私が新たに出発したら、私はこの道に行くだろう。しかし、アーロンの提案は仕事が少ないことを意味しています...(ただ怠けているのですか?) – Drammy

関連する問題