我在ReactiveObject
中使用ViewModel
作为Xamarin.PCL
:
public class PlanViewerViewModel : ReactiveObject
在ViewModel
内,有很多ReactiveUI
逻辑,例如:
FilterIssueTypeCommand = ReactiveCommand.Create<string, List<IGrouping<int, StandardIssueTypeTable>>>(
searchTerm =>
{
Func<StandardIssueTypeTable, bool> filterIssueType = d =>
string.IsNullOrEmpty(this.IssueTypeSearchQuery) ? true :
Contains(d.Title, this.IssueTypeSearchQuery) ||
Contains(d.Category.Title, this.IssueTypeSearchQuery) ||
Contains(d.Issues.Count().ToString(), this.IssueTypeSearchQuery);
return RealmConnection.All<StandardIssueTypeTable>().Where(filterIssueType)
.GroupBy(g => g.CategoryId)
.ToList();
}
);
this.WhenAnyValue(x => x.IssueTypeSearchQuery)
.Throttle(TimeSpan.FromMilliseconds(500), RxApp.MainThreadScheduler)
.Select(x => x?.Trim())
.DistinctUntilChanged()
.InvokeCommand(FilterIssueTypeCommand);
_groupedStandardIssueType = FilterIssueTypeCommand.ToProperty(this, x => x.GroupedStandardIssueType, new List<IGrouping<int, StandardIssueTypeTable>>());
在Xamarin.iOS
开发中,我可以使用以下代码轻松地在每个控制器之间传递ViewModel
:
var finderController = segue.DestinationViewController as PVFinderTabBarController;
finderController.ViewModel = this.ViewModel;
我想知道我怎么能在Xamarin.Android
中做到这一点?
我知道有几种方法可以在Activity
之间传递数据:
string
,int
,bool
传递:这是我目前使用的JSON
:slow Parcelable
或Serializable
:我不想使用它,因为这意味着我需要将ViewModel
复制到Xamarin.Android
项目中。如果我这样做,使用ReactiveUI
毫无意义。
我正在考虑在Application
中使用Android
类,并在其中创建一个ViewModel
的实例,以便每个Activity
都能引用它。像这样:
[Application]
public class GlobalState: Application
{
public PlanViewerViewModel viewModel { get; set; }
}
还有其他解决方案吗?