1

私はこれに慣れていないので、おそらくばかです。とはいえ、ビューを UC にするか Windows にするか? 使用シーンにもよると思いますが…

CreateThisやModifyThatなど、さまざまなアクション用の「ボタン」があるメインビューがあります。ユーザーがこれらの「ボタン」のいずれかをクリックすると、ダイアログ タイプのシナリオで適切なビューを表示したいと考えています。これは、ウィンドウに適しているように見えますが、ウィンドウマネージャーがこれをどのように考慮しているかはわかりません。

また、Winforms の開発を行ったとき、すべての「ビュー」UC を 1 つの再利用可能なウィンドウに埋め込んで、より柔軟にしましたが、適用されるものはここにありますか?

誰かが私を正しい方向に向けますか?ありがとう!

4

1 に答える 1

2

Windowではなく言及しているので、WPFを想定していますChildWindowが、一般的には作成したいと考えていますUserControls

WindowManagerを呼び出すかどうかに基づいて、コンテンツが適切なコンテナーに表示されることを自動的に保証しますShowPopupShowDialogまたはShowNotification、それらを UC にすることで、物事が少し柔軟になります (実際にWindowManagerは、WPF アプリの初期ウィンドウを設定し、ブートストラップが開始する ViewModel のビューを解決します)。ビューがまだウィンドウでない場合は、ウィンドウが作成されるようにします)

複合ビューに関しては、サブビュー モデルをコンポジション コンテナー (つまり、それらをホストする別のビュー モデル) のプロパティとして含め、ContentControlおよび CM 規則を使用してそれらをバインドするだけです。

たとえば、2 つの UC を表示する VM は次のようになります。

public class SomeCompositeViewModel : Screen
{
    public SomeOtherViewModel SomeOtherView { get; set; } // You probably want INPC here as per usual
    public YetAnotherViewModel YetAnotherView { get; set; } 

    public SomeCompositeViewModel()
    {
         // Setup as you need - direct instantiation, IoC/DI, use MEF, whatever works for you
         SomeOtherView = new SomeOtherViewModel();
         YetAnotherView = new YetAnotherViewModel();

    }
}

および XAML

<UserControl x:Class="SomeAssembly.Yadda.Yadda.SomeComposititeViewModel">
    <StackPanel>
        <!-- Bind to SomeOtherViewModel via the SomeOtherView property etc -->
        <ContentControl x:Name="SomeOtherView" /> 
        <ContentControl x:Name="YetAnotherView" />
    </StackPanel>
</UserControl>

(レイアウトでもう少しクリエイティブになりませんか!)

すべてのアイテムにライフサイクルを持たせたい場合は、そのまま使用できますConductor<T>.Collection.AllActiveが、ツール ウィンドウではなく複合ビューを探しているように思えます。

于 2013-04-24T23:14:12.923 に答える