在Xamarin中的Android Activity之间传递ReactiveObject ViewModel

时间:2017-08-09 04:31:42

标签: c# android xamarin xamarin.android reactiveui

我在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之间传递数据:

  • 将其作为stringintbool传递:这是我目前使用的
  • 将对象序列化为JSON:slow
  • 实施ParcelableSerializable:我不想使用它,因为这意味着我需要将ViewModel复制到Xamarin.Android项目中。

如果我这样做,使用ReactiveUI毫无意义。

我正在考虑在Application中使用Android类,并在其中创建一个ViewModel的实例,以便每个Activity都能引用它。像这样:

[Application]
public class GlobalState: Application
{
    public PlanViewerViewModel viewModel { get; set; }
}

还有其他解决方案吗?

0 个答案:

没有答案