mvvmcross iOS 信使 -
mvvmcross iOS Messenger -
提前抱歉,因为我是新手。我正在尝试用另一个 viewmodel
中的字符串触发一个方法,我读到使用 MvxMessenger
基本上是我执行此操作的最佳选择。
我不明白的是如何完成这个
,因为我几乎找不到任何 documentation/sample 代码来让我上路
每当我单击 FilterViewModel
中的按钮时,我还希望它使用 FilterViewModel
中的字符串触发 SearchHistoryViewModel
中的方法。
基本上,即使 SearchHistoryViewModel
代码是正确的,我如何正确地 send/Publish 此消息?
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);
}
好吧,所以我对如何声明信使本身以及在没有标记的情况下而不是在构造函数中使用它感到困惑。解决方案出乎意料地简单:(
基本上声明另一个 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);
}
提前抱歉,因为我是新手。我正在尝试用另一个 viewmodel
中的字符串触发一个方法,我读到使用 MvxMessenger
基本上是我执行此操作的最佳选择。
我不明白的是如何完成这个
每当我单击 FilterViewModel
中的按钮时,我还希望它使用 FilterViewModel
中的字符串触发 SearchHistoryViewModel
中的方法。
基本上,即使 SearchHistoryViewModel
代码是正确的,我如何正确地 send/Publish 此消息?
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);
}
好吧,所以我对如何声明信使本身以及在没有标记的情况下而不是在构造函数中使用它感到困惑。解决方案出乎意料地简单:( 基本上声明另一个 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);
}