0

MV-VM を使用して Prism V2 で WPF を初めて試してみて、これまでのところすべてがかなり素晴らしいものであることがわかりました。私のシェルは非常にシンプルで、上部にリボン コントロール、左側にヘルプ デスク チケットの DataGrid、右側に TabControl があります。

ユーザーが選択したチケットをデータグリッドから開いたときに、チケットをタブ コントロールのタブとして開くようにします。これを行うには、RegionManager を使用してビューをリージョンに追加してアクティブ化する必要があることを知っています。しかし、ViewModel からこれを行うのは正しくないように思えますが、DI (DepenecyInjection) を使用して行うことはできますが、ViewModel に View に関する知識を与えることについて頭の中でアラームを鳴らします。

これに追加するには、さまざまなモジュールが他のビュー (Contact、Client など) を TabControl に追加します。DataTemplates を使用して、TabControl がビューを正しく表示するようにしたいと思います。これに対するポインタも教えてもらえますか? .

どうもありがとうベン

リンクだけでなく、完全な回答をお願いします。それが StackOverflow の目的です。

4

2 に答える 2

1

MVVM +サービス=究極のパワー!

サービスは、よく知られており、IOCコンテナに登録されている単なるインターフェイスです。ViewModelは、タブ付きドキュメントを開くなど、それ自体の外部で何かを行う必要がある場合、サービスを使用します。次に、特定のプログラムの必要に応じてサービスが実装されます。

例えば:

public interface IDocumentService
{
    void OpenDocument(IViewModel viewModel);
}

internal class DocumentService:IDocumentService
{
    public void OpenDocument(IViewModel viewModel)
    {
        // Implement code to select the View for the ViewModel,
        // and add it to your TabControl.
    }
}

{
    // Somewhere in your ViewModel...
    // Make sure you can get the IDocumentService
    IDocumentService docService = ioc.Get<IDocumentService>();
    docService.OpenDocument(new TicketViewModel());
}
于 2009-06-06T14:05:14.913 に答える
0

これを行う方法はコマンドです。「RequestBringTicketIntoView」というコマンドを自分自身に送信します。それはあなたがそれを処理するウィンドウにバブルアップします。Josh Smith の記事を読む:

http://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/

于 2009-05-27T05:32:47.460 に答える