0

MVVMでWPFを使用しています。次のアーキテクチャからUIに進行状況メッセージを取得する方法についてアドバイスが必要です。

UI-ファイル処理ウィンドウ。ViewModel-Message、ProgressValueのプロパティがありますメッセージはUIテキストブロックにバインドされ、ユーザーが他の作業をしているときにバックグラウンドで何が起こっているかについてUIを更新します。

ユーザーが[ファイルの処理]をクリックすると、ViewModelProcessFileが呼び出されます。

ビューモデルはファイルを直接処理しません。次に、ファイルの処理を行う別のアセンブリを呼び出します。

これがコードの断片です(実際のコードをここに置くことはできませんでした):

XAML:

            <StackPanel>
                <TextBlock Text="{Binding Message}" />
                <ProgressBar MinWidth="250" Height="25" IsIndeterminate="True" />
            </StackPanel>

現在、IsIndeterminateがあります。これを変更して、完了率を表示します。

ViewModel

    private string _message;
    public string Message
    {
       get 
       { 
           return _message;
       }
       set 
       { 
           _message=value; 
           OnPropertyChanged("Message");
       }
    }

    private int _progressValue;
    public int ProgressValue
    {
       get { return _progressValue;}
       set 
       { _progressValue=value; 
           OnPropertyChanged("ProgressValue");
       }
    }

    public void StartProcess(string fileName)
    {
       ThreadStart tStart = delegate()
        {
           differentAssembly.StartProcess(string fileName);
        };
        Thread processThread = new Thread(tStart);
        processThread.IsBackground = true;
        processThread.Start();
    }

以上で、異なるアセンブリから進捗情報を取得するにはどうすればよいですか。これは、進捗状況とパーセンテージを示すメッセージになります。

ご協力いただきありがとうございます。

4

2 に答える 2

2

別のアセンブリからプログレスバーの値を増やすことについて同じ質問がありました。

もちろん多くの利点があるスレッドを呼び出す代わりに、Observable パターンを使用しました。デリゲートとバックグラウンド ワーカーを使用します。

私が正しければ、MVVM で Observable パターンを使用できます。

あなたの質問に答えたら教えてください。

于 2012-10-24T22:47:57.767 に答える
1

このようなことができますか?

differentAssembly.StartProcess(fileName, x => ProgressValue = x);

StartProcess 関数は、進行状況の更新を担当します。

public class DifferentAssembly
{
    public void StartProcess(string fileName, Action<int> progressValue)
    {
        // Initialize progress
        progressValue(0);

        // Do Some Things
        progressValue(25);

        // Do More Things
        progressValue(50);

        // Almost There!
        progressValue(75);

        // And, I'm Done
        progressValue(100);
    }
}
于 2012-10-24T21:23:21.773 に答える