Xamarin iOS:从viewModel刷新页面

Xamarin iOS:从viewModel刷新页面,ios,mvvm,xamarin,xamarin.ios,Ios,Mvvm,Xamarin,Xamarin.ios,在Xamarin for iOS开发中,是否有方法可以从其视图模型中刷新视图? 如果有帮助的话,我正在使用MVVMCross 请给我一些建议 谢谢。我在项目中所做的就是使用MvvmCross的Messenger插件来广播消息。然后在视图中,订阅该消息,当广播消息时,相应地刷新视图 首先,创建一个扩展MvxMessage的消息类 public class RefreshViewMessage : MvxMessage { // Add other properties if needed

在Xamarin for iOS开发中,是否有方法可以从其
视图模型
中刷新
视图
? 如果有帮助的话,我正在使用MVVMCross

请给我一些建议


谢谢。

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

首先,创建一个扩展MvxMessage的消息类

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
    }
}
公共部分类视图:MvxViewController
{
公共视图(IntPtr句柄):基(句柄){}
公共视图():基(){}
专用IMvxMessenger\u messenger;
私有MvxSubscriptionToken _token;//保留订阅令牌以防止垃圾收集不及时
公共覆盖无效ViewDidLoad()
{
base.ViewDidLoad();
_messenger=Mvx.Resolve();
_令牌=_messenger.SubscribeOnMainThread(OnRefreshView);
}
私有void OnRefreshView(RefreshViewMessage消息)
{
//如果需要,访问附加到邮件的数据
//var param=message.SomeParameter;
//刷新视图
}
}

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

首先,创建一个扩展MvxMessage的消息类

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
    }
}
公共部分类视图:MvxViewController
{
公共视图(IntPtr句柄):基(句柄){}
公共视图():基(){}
专用IMvxMessenger\u messenger;
私有MvxSubscriptionToken _token;//保留订阅令牌以防止垃圾收集不及时
公共覆盖无效ViewDidLoad()
{
base.ViewDidLoad();
_messenger=Mvx.Resolve();
_令牌=_messenger.SubscribeOnMainThread(OnRefreshView);
}
私有void OnRefreshView(RefreshViewMessage消息)
{
//如果需要,访问附加到邮件的数据
//var param=message.SomeParameter;
//刷新视图
}
}