2011-06-21 8 views
0

TelerikのSilverlight RADGridViewコントロールを使用しており、純粋なMVVM形式で実装しようとしています。 MVVMLightのEventToCommandを使用して、コントロールのイベントをビューモデルに渡しています。Telerik RADGridViewをコードなしで純粋なMVVM形式で使用することはできますか?

特に、AddingNewDataItemイベントを処理しようとしています。

MVVMLightのPassEventArgsToCommandは正常に動作しますが、引数に加えた変更はグリッドコントロール(特にNewObjectパラメータ)に渡されません。コード内でNewObjectを操作すると、すべて正常に動作します。

誰でもこれを動作させる経験はありますか?現時点ではTelerikはMVVMをサポートしているに過ぎず、残念です。

答えて

0

Eric、MVVMLightでSilverlight GridViewコントロールを使用しており、正常に動作するようになっています。

あなたの問題はAddingNewDataItemイベントの理解が深まるかもしれないと思います。あなたはAdding New Entriesのドキュメントを見てみる場合は、AddingNewDataItemが 前に新しい行が表示されて発生し

ていることがわかります。 ハンドラの場合は、 を追加する必要があるオブジェクトを初期化し、 GridViewAddingNewEventArgsに渡します。

初期化されたオブジェクトを取得したら、RowEditEndedイベントを処理して、変更をコミットまたはキャンセルする必要があります。また、Telerikのドキュメントを見ると、GridViewRowEditEndedEventArgs(e.NewData)を介してAddingNewDataItemイベントで作成したオブジェクトにアクセスできることがわかります。また、新しい項目がコミットされると、自動的にRadGridViewの項目に追加されます。

+0

こんにちは孤立したストレージ、 –

+0

こんにちは孤立したストレージ、 私は実際にイベントの構造をかなりよく理解しています。問題は、MVVMモデルに違反するコードの背後にあるイベントを処理すると、オブジェクトモデルを正常に操作できることにあります。しかし、イベントがViewModelクラスで処理されると、情報は一方向にしか移動せず、パラメータは取得されますが、変更はグリッドコントロールに返されません –

2

コードビハインドのコードが残っているということは、コードがMVVMパターンから離れていることを意味します。コードの目的がUIを操作し、問題のドメインデータを参照していない限り、コードビハインド内にコードを持つことは完全に正当です。実際、ViewModelにUI操作を置くことは間違いでしょう。

あなたが達成しようとしていることは明確ではありませんが、GridViewRowEditEndedEventArgsへの参照をViewModelに渡すと、ViewModelはView実装に依存しているため、MVVMパターンから離れることになります。

MVVMパターンでは、ビューはViewModelを知っており、ViewModelはモデルを知っています。しかし、ModelはViewModelに依存せず、ViewModelはViewに依存していないか、Viewに分かっていません。

GridViewRowEditEndedEventArgsリファレンスをViewModelに渡している場合、ビューを他のコントロール(RadListBox、Infragisticsグリッドコントロールなど)に変更するとViewModelが正しく機能しなくなるという問題があります。 Telerikは、唯一の 'ちょっと' MVVM

は不公平と間違っているサポート

あなたの声明こと。

MVVMの目標は、コードビハインドからコードを排除することではありません。これはよくある誤解です。 MVVMの目標は、テスト容易化を促進し、良い「分離問題」の一環としてドメイン&モデルロジックをコードの背後から削除することです。

コードビハインドコードを単にMVVMでないSomethingSomethingViewModelという名前のクラスに移動すると、

関連する問題