如何从库中获取视图模型的回调
本文关键字:视图 模型 回调 获取 | 更新日期: 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 );
}
-
在您的服务中公开委托或事件,在您的视图模型中只需订阅或挂钩到该委托或事件
-
当您想要通知视图模型时 完成特定操作后,只需调用委托或事件
-
将调用在视图模型中挂钩的方法。
-
现在,在您的视图模型中,您可以执行所需的必要操作