Xamarin iOS:从viewModel刷新页面

时间:2017-01-19 21:37:42

标签: ios mvvm xamarin xamarin.ios

在Xamarin for iOS开发中,有没有一种方法可以从view刷新ViewModel? 我正在使用MVVMCross,如果有帮助的话。

请建议。

感谢。

1 个答案:

答案 0 :(得分:2)

我在我的项目中所做的是使用MvvmCross'Messenger插件来广播消息。然后在View中,订阅该消息,并在广播时,相应地刷新视图。

首先,创建一个扩展MvxMessage的Message类。

public class RefreshViewMessage : MvxMessage
{
    // Add other properties if needed
    // public string SomeParameter { get; set; }
    public RefreshViewMessage(object sender) : base(sender)
    {
    }
}

其次,在ViewModel中广播该消息。

public class ViewModel : MvxViewModel
{
    private IMvxMessenger _messenger;
    public MainViewModel(IMvxMessenger messenger)
    {
        _messenger = messenger;        
    }

    public void RefreshView()
    {
        _messenger.Publish(new RefreshViewMessage(this));
        // Maybe some parameters need to be attached
        // var message = new RefreshViewMessage(this) { SomeParameter = "stuff" };
        // _messenger.Publish(message);
    }
}

第三,在视图中订阅该消息。

public partial class View : MvxViewController<ViewModel>
{
    public View(IntPtr handle) : base(handle) { }
    public View() : base() { }

    private IMvxMessenger _messenger;
    private MvxSubscriptionToken _token; // keep a subscription token to prevent untimely garbage collection
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();    
        _messenger = Mvx.Resolve<IMvxMessenger>();   
        _token = _messenger.SubscribeOnMainThread<RefreshViewMessage>(OnRefreshView);
    }

    private void OnRefreshView(RefreshViewMessage message)
    {
        // Access data attached to the message if needed
        // var param = message.SomeParameter;        

        // Refresh view
    }
}