如何在 Xamarin.Forms 中绑定 Picker

3

我一直想要在Xamarin.Forms中将两个选择器的项目绑定到我的ViewModel上。我主要使用绑定来处理文本字段,只需像这样写:

<Label Text="{Binding CurrentDate}" />

通过设置绑定上下文,在视图模型中定义属性即可实现。

    public System.DateTime CurrentDate{
        get { return currentDate; }
        set { currentDate = value; PropertyChanged(this, new PropertyChangedEventArgs("CurrentDate")); }
    }

我已经完成绑定。现在我有两个选择器,这些选择器代表一个映射/字典。 "A" 被映射为 {"1","2"},而 "B" 被映射为 {"4","5"}。第一个选择器应该显示 "A" 和 "B" 作为选项。第二个选择器应该显示与第一个选择器所选值相关联的值。

所以有两个问题:1)如何绑定选择器?2)如何绑定一个具有取决于另一个选择器选择的数据的选择器?

我尝试过:

<Picker Items="{Binding ItemsA}"></Picker>

使用匹配属性

    public List<string> ItemsA
    {
        get { return itemsA;}
        set { itemsA = value;PropertyChanged(this, new PropertyChangedEventArgs("ItemsA")); }
    }

我在这里错过了什么吗?需要帮助,谢谢。


你需要将绑定设置到列表中选择的项目上,而不是列表本身。 - Danil Kurkin
那么你不会尝试绑定Picker中呈现的数据吗?这些数据在模型中可能会在运行时更新,应该在视图中反映出来。你如何填充列表?考虑到这些数据可能在运行时更改。@DanyDaKur - why_vincent
简单地将数据以易于访问的形式进行整理 - 我建议将其保持在 Dictionary<Value1, List<ForValue1>> 中。将第一个列表绑定到 Value1,并根据选择将 Source 上传到 Dictionary 的 Picker 2 中。 @why_vincent - Danil Kurkin
我的当前结构是Dictionary<TypeA, IEnumerable<TypeB>>,但问题是如何进行绑定。另一个帖子说没有引入新的Picker是无法完成这个任务的。问题是“如何将这个数据绑定到Picker上?”你的回答只是“绑定”。我是否有什么误解? - why_vincent
看起来我误解了你需要做的事情 - 我同意其他帖子的观点 - 你需要在这里使用第二个选择器。 - Danil Kurkin
显示剩余2条评论
2个回答

4

看起来这个功能已经内置到了常规的Xamarin.Forms选择器中。目前它在预发布的NuGet包 版本2.3.4-pre1 中,但一旦发布稳定的2.3.4+版本,应该就会包含此功能。您可以将绑定从Items更改为ItemSourceSelectedItem


1
它现在已经发布了! - Nitesh

4

这个功能很遗憾在标准组件中缺失,但是可以通过详细说明的方法很容易地添加,具体请参考https://forums.xamarin.com/discussion/30801/xamarin-forms-bindable-picker。使用这个派生组件,您将能够绑定ItemsSourceSelectedItem属性。如果需要,也可以相对容易地添加类似于WPF的DisplayMemberPath和ValueMemberPath属性。


真的吗?我对此还有点陌生,但对我来说,Mvvm几乎是全或无。我认为几乎完全分离的视图没有任何意义。我会检查一下这个组件。非常奇怪,这样一个基本的图形元素不支持这个功能。这是大多数Xamarin.Forms组件都是这样吗? - why_vincent
我同意 - 当我第一次遇到它时,它似乎是一个惊人的疏漏,但它并不是冰山一角。随着BindablePicker控件和Repeater控件的添加(用于基于ItemsSource重复模板化内容),我发现Xamarin Forms是一个相当有能力的MVVM平台,特别是与免费的DevExpress表格结合使用,我已经相对轻松地移植了一些实质性的基于Microsoft XAML的应用程序,没有太多的妥协。 - Ben Jackson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接