TheDeveloper
TheDeveloper

Reputation: 1217

Xamarin iOS: Refresh page from viewModel

In Xamarin for iOS development, is there a way I could refresh a view from its ViewModel? I am using MVVMCross, if it helps.

Please advice.

Thanks.

Upvotes: 0

Views: 1001

Answers (1)

batrand
batrand

Reputation: 146

What I do in my projects is to use MvvmCross' Messenger plugin to broadcast a message. Then in the View, subscribe for that message, and when one is broadcasted, refresh the view accordingly.

First, create a Message class extending MvxMessage.

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

Second, broadcast that message in the 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);
    }
}

Third, subscribe for that message in the View.

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
    }
}

Upvotes: 2

Related Questions