假设我有一个带字符串数组属性的MvxViewModel:
customBinding
假设我还有一个带有单个字符串属性的iOS MvxViewController:
using System;
using Cirrious.MvvmCross.ViewModels;
namespace Foo {
public class FooViewModel : MvxViewModel {
private string[] mTexts;
public string[] Texts {
get { return mTexts; }
set {
mTexts = value;
RaisePropertyChanged(() => Texts);
}
}
public void Init()
{
Texts = new string[] { "foo", "bar" };
}
}
}
如何将此字符串属性using System;
using Cirrious.MvvmCross.Touch.Views;
using Cirrious.MvvmCross.Binding.BindingContext;
namespace Foo {
public class FooView : MvxViewController {
public string Text { get; set; }
public override void ViewDidLoad () {
base.ViewDidLoad();
var bindset = this.CreateBindingSet<FooView, FooViewModel>();
bindset.Bind(Text).To("Texts[0]");
bindset.Apply();
}
}
}
绑定到Text
数组的一个位置(例如0)?
我找到了来源(here和here),表明这可以通过上面的Texts
方法完成,但是,我收到警告:{{ 1}}。
我错过了什么?
答案 0 :(得分:2)
您可以使用List
或ObservableCollection
代替Array
:
private List<string> mTexts;
public List<string> Texts
{
get { return mTexts; }
set
{
mTexts = value;
RaisePropertyChanged(() => Texts);
}
}
我不确定Mvx support for Array
type properties。我总是倾向于使用ObservableCollection
或List
。尝试绑定到Array
时收到的错误消息似乎表明它正努力在Array
上进行索引查找。
无法绑定:未在源[]
上找到源属性源IndexedProperty:0
我尝试过并且似乎工作的一种方法是在ViewModel中实现Indexer
然后绑定到它。
<强> 视图模型 强>
string[] mTexts;
public string this[int index] => mTexts[index];
public void Init()
{
mTexts = new string[] { "foo", "bar" };
}
查看约束
var bindset = this.CreateBindingSet<FooView, FooViewModel>();
bindset.Bind(Text).To(".[1]");
bindset.Apply();
正如xleon在下面的评论中所指出的,这段时间是可选的。使用"[1]"
也可以。
替代Lambda:
var bindset = this.CreateBindingSet<FooView, FooViewModel>();
bindset.Bind(Text).To(vm => vm[1]);
bindset.Apply();