【问题标题】:How to bind Picker in Xamarin.Forms如何在 Xamarin.Forms 中绑定 Picker
【发布时间】:2016-06-08 13:48:08
【问题描述】:

所以我一直想将 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")); }
    }

我在这里错过了什么吗?帮助将不胜感激。

【问题讨论】:

  • 您绑定到列表的选定项目,而不是列表本身。
  • 所以你不会尝试绑定 Picker 中呈现的数据?这可能会在模型运行时更新,并应反映在视图中。你如何填充列表?考虑到这些数据可能会在运行时发生变化。 @DanyDaKur
  • 简单地以易于访问的形式排列您的数据 - 我建议将其保存在 Dictionary> 中。将第一个列表绑定到值 1,并根据选择 - 将 Source 从 Dictionary 上传到选择器 2。 @why_vincent
  • 我当前的结构是 Dictionary> 但问题是如何进行绑定。另一张海报说,如果不引入新的 Picker,就无法做到这一点。问题是“如何将这些数据绑定到 Picker?”。你的答案只是“绑定”。我是不是误会了什么?
  • 看起来我误解了你需要做什么——我同意其他海报——你需要第二个选择器

标签: mvvm xamarin


【解决方案1】:

不幸的是,标准组件中缺少此功能,但添加起来相对容易,详见https://forums.xamarin.com/discussion/30801/xamarin-forms-bindable-picker。使用这个派生组件,您将能够绑定 ItemsSourceSelectedItem 属性。如果需要,添加类似 WPF 的 DisplayMemberPath 和 ValueMemberPath 属性也相对容易。

【讨论】:

  • 真的吗?我对此有点陌生,但 Mvvm 对我来说几乎是全有或全无。我认为有一个几乎完全分开的视图是没有意义的。我会检查这个组件。很奇怪,这样一个基本的图形元素不支持这一点。大多数 Xamarin.Forms 组件都是这样吗?
  • 我同意 - 当我第一次遇到它时,它看起来确实是一个令人震惊的遗漏,但这不是冰山一角。通过添加 BindablePicker 控件和 Repeater 控件(用于基于 ItemsSource 重复模板化内容),我发现 Xamarin Forms 是一个非常强大的 MVVM 平台,尤其是与免费的 DevExpress 网格结合使用时,我现在已经相对容易地移植了一些实质性的没有太多妥协的基于 Microsoft XAML 的应用程序。
【解决方案2】:

现在看起来此功能已内置到常规 Xamarin.Forms 选取器中。它目前在version 2.3.4-pre1 的预发布 NuGet 包中,但一旦发布就应该是稳定的 2.3.4+ 版本。而不是绑定到项目,而是绑定到 ItemsSourceSelectedItem

【讨论】:

  • 它现在发布了!
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2015-09-13
  • 2021-08-09
相关资源
最近更新 更多