如何从库中获取视图模型的回调

本文关键字:视图 模型 回调 获取 | 更新日期: 2023-09-27 18:37:02

我在一个视图(Home.xaml)中有一个UIControl(LatestHeadline)(同一页面上还有大约10个控件),这是一个文本块。我想在用户从同一视图中单击名为"检索"的按钮时设置此控件的文本。我必须从我的视图模型中调用实用程序库中的方法。实用程序库中的方法(GetLatestHeadline)通过Webclient类连接到Web api,并触发(deleagate)方法Retrieve_Completed事件。

一旦这个事件完成,所需的数据就会从eventargs paramater e.现在从实用程序库中,我想将数据返回到视图模型,以便我可以将其绑定到最新的标题文本块。

最新标题文本块绑定到视图模型中定义的属性(名为"PropHeadLine")。有没有办法在C#.Net中实现这一点?

如何从库中获取视图模型的回调

如果您可以从视图模型访问实用程序类,那么当然可以向视图模型中的Retrieve_Completed delegate添加一个处理程序。

utilityClass.Retrieve_Completed += UtilityClassRetrieve_Completed;
utilityClass.GetLatestHeadline();
...
public void UtilityClassRetrieve_Completed(EventArgs e)
{
    // Do something with your e.New value here in the view model
    LatestHeadlineProperty = e.New;
}

当然,我只是猜测你在这里Retrieve_Completed定义是什么,但希望你明白了。

我喜欢这种事情的"回调"概念 - 特别是将Action<string>从视图模型传递给服务。 然后,服务可以保存对回调的引用,或将其传递给"UserState"中的已完成处理程序。 因此,实用程序方法如下所示:

public void GetLatestHeadline(Action<string> callback)
{
    _apiClient.Retrieve(userState: callback);
}
private void Retrieve_Completed(object sender, RetrieveCompletedEventArgs args)
{
    var callback = args.UserState as Action<string>;
    if (callback != null)
        callback(args.Result.Headline);
}

现在视图模型可以将回调传递给实用程序方法——回调应该只是将属性"PropHeadLine"设置为结果值:

private void Button_Click()
{
    Utilities.GetLatestHeadline( result => PropHeadLine = result );
}
  1. 在您的服务中公开委托或事件,在您的视图模型中只需订阅或挂钩到该委托或事件

  2. 当您想要通知视图模型时 完成特定操作后,只需调用委托或事件

  3. 将调用在视图模型中挂钩的方法。

  4. 现在,在您的视图模型中,您可以执行所需的必要操作