22

プロジェクトベースの WPF と MVVM があります。私のプロジェクトは、私のビュー (ユーザー コントロール) を表示するコンテンツ コントロールを含むウィザードに基づいています。

私は使用してみました:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding StartProgressCommand}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

しかし、コマンドはビュー UI が表示される前に実行され、探しているものではありません。

誰かがそれをどのように実装する必要があるか考えていますか?

4

8 に答える 8

17

これには Dispatcher を使用し、優先順位を ApplicationIdle に設定して、すべてが終了したときに実行されるようにすることができます

            Application.Current.Dispatcher.Invoke(
            DispatcherPriority.ApplicationIdle,
            new Action(() =>
            {
               StartProgressCommand.Invoke(args);

            }));

ディスパッチャーの詳細http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcherpriority.aspx

乾杯。ステ。

于 2012-10-23T12:21:33.720 に答える
2

それを行う別の方法:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"これをxmlns:mi="http://schemas.microsoft.com/expression/2010/interactions"ユーザーコントロール XAML で定義し、プロジェクトに Microsoft.Expression.Interactions アセンブリを追加します。次のように、トリガーで CallMethodAction を使用します。

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <mi:CallMethodAction TargetObject="{Binding}" MethodName="StartProgressCommand"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

トリガーをユーザー コントロールのルート要素内に配置します (例: grid)。そして、ViewModel クラスの StartProgressCommand を、コマンドから単純な古い通常のメソッドに変更します。たとえば、次のようになります。

public void StartProgressCommand()
{
  /* put your program logic here*/
}

ユーザー コントロールがレンダリングされるたびに、メソッドが 1 回だけ実行されます。

于 2014-08-25T04:34:54.227 に答える
0

ビューの IsLoaded プロパティを確認できます。ビューがロードされた形式の場合は false を返し、ビューが完全にロードされた場合、このプロパティは true になります。

ありがとう、ラジニカント

于 2012-10-23T09:27:03.317 に答える
0

「CommandExecute」メソッドの最初の行に「Thread.Sleep(10000)」を記述できます。同じロード済みトリガーを使用します。

Thread.Sleep を使用したくない場合は、「DispatcherTimer」を使用できます。コマンド実行メソッドでタイマーを開始し、すべてのコードをタイマーティックイベントにシフトします。ユーザーがUIを送信できるように、タイマー間隔を2秒に設定します。

于 2012-10-23T11:05:29.637 に答える
0

ContentRenderedイベントにバインドしようとしましたか? ロードされたイベントの後に発生しますが、これが UI スレッドがウィンドウの描画を完了したことを保証するものかどうかはわかりません。

于 2012-10-23T09:33:24.813 に答える