0

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

此事件完成后,将从 eventargs 参数 e 中检索所需的数据。现在从实用程序库中,我想将数据返回到视图模型,以便我可以将其绑定到 LatestHeadline 文本块。

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

4

3 回答 3

1

如果您可以从视图模型访问实用程序类,那么您当然可以在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定义是什么,但希望您能理解。

于 2013-10-25T15:54:24.540 回答
0

我喜欢这种事情的“回调”概念——特别是,将一个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 );
}
于 2013-10-25T17:09:53.933 回答
0
  1. 在您的服务中公开一个委托或事件,在您的视图模型中只需订阅或挂钩该委托或事件

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

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

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

于 2013-10-25T17:29:29.930 回答