mvvmcross iOS Messenger -

时间:2018-05-06 11:00:57

标签: c# ios xamarin mvvmcross

提前抱歉,因为我是新手。我正在尝试使用另一个set中的字符串触发方法,我已经读过使用viewmodel基本上是我做这个的最佳选择。 我不明白,因为我几乎找不到任何文档/示例代码来帮助我实现这个目标

每当我点击MvxMessenger中的按钮时,我也希望它在FilterViewModel中使用SearchHistoryViewModel中的字符串触发方法。 基本上,如果FilterViewModel代码甚至是正确的,我该如何正确发送/发布此消息?

FilterViewModel

SearchHistoryViewModel

SearchHistoryViewModel

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
          ... ? /////////////////////
    }`

1 个答案:

答案 0 :(得分:0)

好吧,所以我对如何声明信使本身感到困惑,并且在没有标记的情况下使用它,而不是在构造函数中使用它。解决方案很容易:( 基本上宣布另一个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);

    }