ョべきであるというのを参照するプレゼンター/ViewModel?
質問
って、プリズム2サンプルのアイデアのプラットフォームに新たな応用ように、プリズムを2/コンポーネントのラインナップアプリです。しくみると、特定のビュー注入サンプルアプリケーションとプリズムにのってすべての実装インタフェースでの発表者(またはViewModel)と交流する方は受付にお申し出ください
過去にやってきたことをここにうことによって、これまでうまく丸い入または報告者のようにすることができますが直接呼び出方法は報告者のようなこと:
public partial class SomeView : ModuleBase
{
private ISomePresenter _somePresenter;
public SomeView (ISomePresenter somePresenter):this()
{
// Give the view a reference to the presenter
_somePresenter = somePresenter;
// Bind the View to the presenter
DataContext = _somePresenter;
}
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
// The view can call actions directly on the presenter (OK I should probably use a command for this)
_somePresenter.SomeAction();
}
}
その技術上について行ったのに十分ないものを見るサンプルを思を問題にしている。はずれていた(するオシャレで最良の道のりは有りますか?
- 追加プレゼンターのビューのビューと交流、発表者
- 追加のビューの発表者の発表者との交流の眺め
- 何か違うんか?
解決
それはすべて好みの問題だと思います。個人的に、私はあなたが見ているサンプルであなたがそれを見る方法を楽しみます。 IViewにはSetViewModel(...)という1つのメソッドがあります。 IViewModelには、Object型のViewと呼ばれるプロパティがあり、基本的にはインスタンス化されたDI IViewを返します。
この方法が好きな理由は、ほとんどの場合最初にViewModelを作成し、コードの nobody がインスタンスへの参照を取得する以外はIViewで何でもできるようにすることです(ビューの挿入またはビューをContentControlと言うためにバインドするため)、これがそのタイプオブジェクトの理由です。コードがビューとやり取りする必要がある場合、私にとっては、常にVMを介しています...それでも、ビューは通常バインディングを介して更新されます。 VM-> UpdateBinding-> Viewよりも、View-> ViewModel-> UpdateBinding-> Viewから移動するのは奇妙に感じます
質問に答えるために、通常、分離コードのプレゼンターへの参照は必要ありません。通常、VMにバインドされているビューのコマンドを使用して処理できます。 場合によっては、プレゼンターへの参照を保持して、例にあるようにしたいかもしれませんが、正しいツールセットがあれば回避できます(組み込みコマンドがないとSLが難しくなります)。
私が言ったように、それはすべて好みの問題です...
-Jer
他のヒント
最も一般的なアプローチにプViewModelを見ョ利用にあ DataTemplate
:
<DataTemplate DataType="{x:Type vm:SomeViewModel}">
<v:SomeView />
</DataTemplate>
ときに表示さViewModelインスタンスにContentControlはItemsControl,コンポーネントのラインナップに自動的にインスタンスを生成に適切なのViewModel、セットの観光スポットの拠点に DataContext
のViewModelインスタンス.
そのように継続してご利用いただけ基準のViewModel、ビューのみを参照しViewModelの DataContext
物件です。場合には本当にアクセスする必要ViewModelのビューのコードの背後には常にキャストの DataContext
(これは、このビューの内容について知っていViewModelの実際の型に起因する結)