0

現在の状況

次のアプローチを使用して、一致する ViewModel のビューを解決しています。(簡体字)

<Window.Resources>
    <ResourceDictionary>
        <DataTemplate DataType="{x:Type local:DemoVm2}">
            <local:DemoViewTwo />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:DemoVm}">
            <local:DemoView />
        </DataTemplate>
    </ResourceDictionary>
</Window.Resources>

<DockPanel LastChildFill="True">
    <Button Content="Switch To VmOne" Click="ButtonBase_OnClick"></Button>
    <Button Content="Switch To VmTwo" Click="ButtonBase_OnClick2"></Button>

    <ContentPresenter Content="{Binding CurrentContent}" />
</DockPanel>

ビューは、ContentPresenter 内で ViewModel を切り替えた後、WPF によって自動的に解決されます。

初期化に 2 ~ 4 秒かかる複雑なビューを使用する場合、BusyIndi​​cator を表示したいと考えています。データではなくビジュアルの量が多いため、最大 2 ~ 4 秒かかります。

問題

現在のビューモデルにしかアクセスできないため、ビューの初期化/読み込みプロセスがいつ終了したかわかりません。

私のアプローチ

私の考えは、InitializeComponent() が終了した後、または LoadedEvent を処理した後に、接続された ViewModel (IsBusy=false) にブール値を設定できる各 UserControl に動作を接続することでした。このプロパティは、他の場所で BusyIndi​​cator にバインドできます。

この動作を個々のユーザーコントロール/ビューにアタッチする必要があるため、このソリューションにはあまり満足していません。

この種の問題に対する別の解決策はありますか?GUI の読み込みプロセスをユーザーから隠したいと思っているのは私だけではないでしょうか?!

最近、このスレッドhttp://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspxに出会いました。しかし、これは2007年のものなので、私の目標を達成するためのより良い/より便利な方法があるかもしれません?

4

2 に答える 2