0

我正在使用带有 MVVM 的 WPF。我需要一些关于如何从以下架构将进度消息发送到 UI 的建议。

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

当用户单击处理文件时,将调用 ViewModel ProcessFile。

视图模型直接不处理任何文件。它反过来调用一个不同的程序集来处理文件。

以下是代码片段(我无法将实际代码放在这里):

XAML:

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

目前我有它是不确定的。我将更改它以显示完成百分比。

视图模型

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

现在说了我如何从不同的Assembly 获取进度信息。这将是一条说明进度和百分比的消息。

谢谢你的帮助。

4

2 回答 2

2

关于增加不同程序集的进度条值,我有同样的问题。

我没有调用当然有很多优点的线程,而是使用了 Observable 模式。它使用代表和后台工作人员。

如果我是对的,我们可以将 Observable 模式与 MVVM 一起使用。

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

于 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 回答