在Xamarin for iOS开发中,有没有一种方法可以从view
刷新ViewModel
?
我正在使用MVVMCross,如果有帮助的话。
请建议。
感谢。
答案 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
}
}