来自不同程序集的WPF Progressbar消息

时间:2012-10-24 21:13:53

标签: wpf

我正在使用WPF和MVVM。我需要一些建议,告诉我如何从以下架构中获取进度消息。

UI - 文件处理窗口。 ViewModel - 具有Message,ProgressValue的属性 该消息绑定到UI文本块,以便在用户正在处理其他内容时更新后台正在发生的事情。

当用户单击Process file时,将调用ViewModel ProcessFile。

viewmodel不直接处理任何文件。它又调用一个不同的程序集来处理文件。

以下是代码片段(我无法在此处输入实际代码):

XAML:

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

目前我有IsIndeterminate。我将更改此项以显示完成百分比。

视图模型

    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();
    }

现在,我说如何从differentAssembly获取进度信息。这将是一条说明进度和百分比的信息。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我在增加不同程序集的进度条值方面遇到了同样的问题。

我使用了Observable模式,而不是调用当然具有很多优点的线程。其中使用了代理人和后台工作人员。

如果我是对的,我们可以在MVVM中使用Observable模式。

如果我回答了你的问题,请告诉我。

答案 1 :(得分: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);
    }
}