我正在使用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获取进度信息。这将是一条说明进度和百分比的信息。
感谢您的帮助。
答案 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);
}
}