如何将后端状态消息传达给前端?

我有一个WPF项目和一个Console项目,WPF的要点是前端UI,控制台应用程序是执行实际工作的逻辑。

在后端,我有一个带有可完成工作的方法的类。

public static class BackendClass
{
    public static void DoWork(ref string output)
    {
        //actual work
    }
}

从MVVM前端,我的视图模型为此方法启动了一个任务,我希望能够在其前端显示状态消息。诸如“开始工作”,“某某事情正在做”,“完成”之类的事情。等。

我的视图模型中的代码是:

class ViewModel : INotifyPropertyChanged
{
    static string backendOutput;

    public string BackendOutput
    {
        get => backendOutput;

        set
        {
            if (backendOutput != value)
            {
                backendOutput = value;
                OnPropertyChanged("BackendOutput");
            }
        }
    }

    public RelayCommand ExecuteCommand { get; private set; }
    Task executionTask;
    public event PropertyChangedEventHandler PropertyChanged;

    public ViewModel()
    {
        executionTask = new Task(() => BackendClass.DoWork(ref BackendOutput));
    }

    void OnExecute()
    {
        executionTask.Start();
        ExecuteCommand.RaiseCanExecuteChanged();
    }

    bool CanExecute()
    {
        return (executionTask.Status != TaskStatus.Running &&
                executionTask.Status != TaskStatus.WaitingToRun);
    }

    public void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
    }
}

“ BackendOutput”属性是数据绑定到WPF窗口中的文本块。

我当时正在考虑传递“ BackendOutput”属性,以便“ DoWork”方法可以向其附加状态消息,从而引发更改后的事件,从而更新前端。 但是,如果我尝试在构造函数之外分配它,则会出现错误,即属性不能是字段初始化器或类似的东西,在这种情况下,我会收到“无法将属性作为ref参数传递”的信息。 >

那么我应该如何提醒前端背面正在抽出哪些状态消息?

jxl8411185 回答:如何将后端状态消息传达给前端?

ViewModel通过PropertyChanged事件与View通信。因此Model也可以有一个事件。 ViewModel订阅该事件,使用事件数据更新属性,View得到更新。

事件是一种受保护的委托。因此,第一步,请尝试引入一个委托人:

public static void DoWork(Action<string> notifier)
{
    notifier("output value");
}

executionTask = new Task(() => BackendClass.DoWork(str => { BackendOutput = str; }));
本文链接:https://www.f2er.com/3096162.html

大家都在问