2017-01-19 6 views

答えて

2

私のプロジェクトでやっていることは、MvvmCrossのメッセンジャープラグインを使ってメッセージをブロードキャストすることです。次に、ビューでそのメッセージを購読し、ブロードキャストされている場合は、それに応じてビューを更新します。

まず、MvxMessageを拡張したMessageクラスを作成します。

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

第2に、そのメッセージを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); 
    } 
} 

第3に、ビュー内のそのメッセージを購読します。

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 
    } 
} 
関連する問題