C# Android和Spinner与ReactiveUI的绑定
我正在尝试在Xamarin.Android应用程序中使用ReactiveUI绑定到微调器。要将项目添加到C# Android和Spinner与ReactiveUI的绑定,c#,data-binding,xamarin.android,reactiveui,C#,Data Binding,Xamarin.android,Reactiveui,我正在尝试在Xamarin.Android应用程序中使用ReactiveUI绑定到微调器。要将项目添加到微调器,我需要使用ArrayAdapter。但是ArrayAdapter需要Android.Content.Context。我应该将其传递到ViewModel中吗 有谁知道一个用Xamarin.Android编写的应用程序,它使用的是ReactiveUI,我可以在那里找到灵感?ReactiveUI文档仅引用为iOS编写的示例应用程序 看法 我还没有做过任何Xamarin.Android的开发,
微调器
,我需要使用ArrayAdapter
。但是ArrayAdapter
需要Android.Content.Context
。我应该将其传递到ViewModel中吗
有谁知道一个用Xamarin.Android编写的应用程序,它使用的是ReactiveUI,我可以在那里找到灵感?ReactiveUI文档仅引用为iOS编写的示例应用程序
看法
我还没有做过任何Xamarin.Android的开发,但一般来说,您不希望将有关视图的详细信息传递到ViewModel中,因为它不应该知道关于视图的任何信息 我会将项目列表公开为一个集合(例如,
IList
),并使用绑定上的转换器创建一个ArrayAdapter
:
this.OneWayBind(this.ViewModel.Devices, this.View.Property, devices => new ArrayAdapter(devices));
this.View.Property
应指每当设备列表更改时都会更改的属性。第三个参数(devices=>new ArrayAdapter()
)从ViewModel接收属性作为参数,然后返回可在this.View.property
上设置的值
例如:
是一个ViewModel.Count
字符串
是一个View.Property
int
this.OneWayBind(this.ViewModel.Count, this.View.Property, count => int.Parse(count));
第三个参数可以是一个函数或lambda,它接受ViewModel属性类型的参数,并返回view属性类型的值。我没有做任何Xamarin.Android开发,但一般来说,您不希望将有关视图的详细信息传递到ViewModel中,因为它不应该知道有关视图的任何信息 我会将项目列表公开为一个集合(例如,
IList
),并使用绑定上的转换器创建一个ArrayAdapter
:
this.OneWayBind(this.ViewModel.Devices, this.View.Property, devices => new ArrayAdapter(devices));
this.View.Property
应指每当设备列表更改时都会更改的属性。第三个参数(devices=>new ArrayAdapter()
)从ViewModel接收属性作为参数,然后返回可在this.View.property
上设置的值
例如:
是一个ViewModel.Count
字符串
是一个View.Property
int
this.OneWayBind(this.ViewModel.Count, this.View.Property, count => int.Parse(count));
第三个参数可以是一个函数或lambda,它接受ViewModel属性类型的参数,并返回view属性类型的值。我说过我会提供有关Stackoverflow的任何反馈,但无论如何。。。我们有一组绑定扩展,其中一个用于微调器。在典型用法中,它看起来是这样的
// bind the options for the distance
this.BindSpinner(ViewModel,
vm => vm.TravelLimitSelected,
vm => vm.CurrentTravelLimit,
vm => vm.TravelLimitChoices.Distances,
f => f.travelLimitSpinner,
(items) =>
new ActionSpinnerAdapter<DistanceChoiceModel>((c, p) => new DistanceLimitViewHost(c, p), items));
//绑定距离的选项
此.BindSpinner(ViewModel,
vm=>vm.TravelLimitSelected,
vm=>vm.CurrentTravelLimit,
vm=>vm.TravelLimitChoices.distance,
f=>f.travelLimitSpinner,
(项目)=>
新的ActionSpinnerAdapter((c,p)=>new DistanceLimitViewHost(c,p,items));
在本例中,扩展方法如下所示
public static IDisposable BindSpinner<TView, TViewModel, TCommandProp, TSpinnerViewModel>(
this TView view,
TViewModel viewModel,
Expression<Func<TViewModel, TCommandProp>> viewModelCommandName,
Expression<Func<TViewModel, int>> viewModelSelectedPropertyName,
Expression<Func<TViewModel, IList<TSpinnerViewModel>>> viewModelSourceItemsName,
Expression<Func<TView, Spinner>> spinnerControl, Func<IList<TSpinnerViewModel>, ISpinnerAdapter> adapterFactory) where TViewModel : RxViewModel
where TCommandProp : ICommand
where TView : class, IViewFor<TViewModel>
where TSpinnerViewModel : class
{
公共静态IDisposable绑定微调器(
这一电视观点,,
TViewModel viewModel,
表达式viewModelCommandName,
表达式viewModelSelectedPropertyName,
表达式viewModelSourceItemsName,
表达式spinnerControl,Func adapterFactory),其中TViewModel:RxViewModel
其中TCommandProp:ICommand
where TView:类,IViewFor
其中tspinerviewmodel:class
{
我说过我会提供有关Stackoverflow的任何反馈,但无论如何……我们有一个绑定扩展集合,其中一个是用于微调器的。在典型用法中,它是这样的
// bind the options for the distance
this.BindSpinner(ViewModel,
vm => vm.TravelLimitSelected,
vm => vm.CurrentTravelLimit,
vm => vm.TravelLimitChoices.Distances,
f => f.travelLimitSpinner,
(items) =>
new ActionSpinnerAdapter<DistanceChoiceModel>((c, p) => new DistanceLimitViewHost(c, p), items));
//绑定距离的选项
此.BindSpinner(ViewModel,
vm=>vm.TravelLimitSelected,
vm=>vm.CurrentTravelLimit,
vm=>vm.TravelLimitChoices.distance,
f=>f.travelLimitSpinner,
(项目)=>
新的ActionSpinnerAdapter((c,p)=>new DistanceLimitViewHost(c,p,items));
在本例中,扩展方法如下所示
public static IDisposable BindSpinner<TView, TViewModel, TCommandProp, TSpinnerViewModel>(
this TView view,
TViewModel viewModel,
Expression<Func<TViewModel, TCommandProp>> viewModelCommandName,
Expression<Func<TViewModel, int>> viewModelSelectedPropertyName,
Expression<Func<TViewModel, IList<TSpinnerViewModel>>> viewModelSourceItemsName,
Expression<Func<TView, Spinner>> spinnerControl, Func<IList<TSpinnerViewModel>, ISpinnerAdapter> adapterFactory) where TViewModel : RxViewModel
where TCommandProp : ICommand
where TView : class, IViewFor<TViewModel>
where TSpinnerViewModel : class
{
公共静态IDisposable绑定微调器(
这一电视观点,,
TViewModel viewModel,
表达式viewModelCommandName,
表达式viewModelSelectedPropertyName,
表达式viewModelSourceItemsName,
表达式spinnerControl,Func adapterFactory),其中TViewModel:RxViewModel
其中TCommandProp:ICommand
where TView:类,IViewFor
其中tspinerviewmodel:class
{