簡體   English   中英

mvvmcross iOS Messenger-

[英]mvvmcross iOS Messenger -

抱歉,我是新手。 我正在嘗試使用另一個viewmodel的字符串來觸發方法,並且我讀到使用MvxMessenger基本上是實現此目的的最佳選擇。 我不明白,因為我幾乎找不到任何文檔/示例代碼來幫助我前進,這是如何完成此任務的

每當我點擊一個按鈕FilterViewModel ,我也希望它引發的方法SearchHistoryViewModel從字符串FilterViewModel 基本上,如果SearchHistoryViewModel代碼正確無誤,如何正確發送/發布此消息?

FilterViewModel

public class SearchHistoryFilterViewModel : MvxViewModel
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value;
            RaisePropertyChanged(() => Name);
        }
    }

    public SearchHistoryFilterViewModel(IMvxMessenger messenger)
    {
        //_token = messenger.Subscribe
        //_messenger = messenger;
    }

    public IMvxCommand FilterCommand
    {
        get
        {
            return new MvxCommand(FilterByName);
        }
    }

    public void FilterByName()
    {
        //Whenever this method is triggered, send a message with the Name in it
        SearchFilterMessage message = new SearchFilterMessage(this, Name);
        //Send message
          ... ? /////////////////////
    }`

SearchHistoryViewModel

public class SearchHistoryViewModel : MvxViewModel
{

  //properties
  ...
  ...
    private readonly MvxSubscriptionToken _token; 


    //ctor
    public SearchHistoryViewModel(ISearchHistoryService searchHistoryService, IMvxNavigationService navigationService, IMvxMessenger messenger)
    {
        _searchHistoryService = searchHistoryService;
        _navigationService = navigationService;

  /*Subscribe - Whenever a SearchFilterMessage is received, trigger the 
  OnFilterMessage method */
        _token = messenger.Subscribe<SearchFilterMessage>((message => { 
  OnFilterMessage(message.FilterName); })
            );
    }

    //methods
  ....
  ....
  ....
    /* Do this Whenever the SearchFilterMessage is received*/
   public async void OnFilterMessage(string name)
    {
        HistoryItems = await _searchHistoryService.GetHistoryByName(name);
    }

好吧,所以我對如何聲明Messenger本身以及如何在沒有標記的情況下使用它而不是在構造函數中感到困惑。 可以預見,解決方案很容易:((基本上聲明了另一個ImvxMessenger並通過注入對其進行設置,然后調用該ImvxMessenger並以另一種方法發布它

    private IMvxMessenger _messenger;
    public SearchHistoryFilterViewModel(IMvxMessenger messenger)
    {
        //_token = messenger.Subscribe...
        //messenger.Publish<SearchFilterMessage>(FilterByName());
        _messenger = messenger;
    }

    public void FilterByName()
    {
        Debug.WriteLine(Name);
        SearchFilterMessage message = new SearchFilterMessage(this, Name);
        //Send message
        _messenger.Publish<SearchFilterMessage>(message);

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM