【问题标题】:Setting ComboBox.SelectedIndex Breaks OneWayToSource Binding On ComboBox.SelectedItem设置 ComboBox.SelectedIndex 会破坏 ComboBox.SelectedItem 上的 OneWayToSource 绑定
【发布时间】:2009-08-24 19:39:13
【问题描述】:

以下内容出现在数据模板中:

<ComboBox IsSynchronizedWithCurrentItem="False"
          SelectedIndex="0"
          SelectedItem="{Binding Path=Value, Mode=OneWayToSource}"
          ItemsSource="{Binding Path=EnumeratedValues, Mode=OneTime}"/>

设置SelectedIndex(如上所示)后,OneWayToSource 绑定到Value 不起作用。如果我不设置SelectedIndex 绑定到Value 就可以了。

但是,我真的很想将 SelectedIndex 设置为 0,因为如果我省略设置它,no 项目在 ComboBox 中默认被选中。

任何人都可以看到一种方法,我可以保持与Value 的绑定工作,同时确保默认选择ComboBox 中的第一项?

【问题讨论】:

  • Dave,...出现在数据模板中:和设置了 SelectedIndex(如上所示)之间没有任何显示...是否缺少某些源代码?
  • 我也遇到了同样的问题,如果人们不想说它根本不起作用,那我会感到震惊。此外,SelectedIndex 的目的是什么,因为所有 ComboBoxes 都必须绑定到某些东西(否则它们将无用)。

标签: c# .net wpf data-binding combobox


【解决方案1】:

为什么不使用双向绑定,只需在代码中设置对象的 Value 属性?

编辑:添加说明:这允许您只使用您的业务对象。使用数据绑定的目的是将您的业务对象与 UI 分开,并且只需操作您的业务对象并让 UI 反映这一点。

【讨论】:

  • 我实际上考虑过这个,但对于 SelectedIndex。无论我为哪一个做这件事,由于我试图从中填充 Value 的 ComboBox 被埋在数据模板中,并且并不总是使用该数据模板,这将变得很棘手。我有两个数据模板(另一个没有 ComboBox),要使用的一个由 DataTemplateSelector 选择。我不知道如何以编程方式获取 ComboBox(当它存在时),因此我努力在 XAML 中工作。但我有一种感觉,我必须朝着你建议的方向前进,并学习如何以编程方式做到这一点。
  • 我并不是说你应该对数据模板或组合框做任何事情。我是说您更新了您的 ui 绑定到的业务对象。如果您有双向绑定,则 ui 将更新以反映此更改。如果您正确地进行数据绑定,您应该只使用业务对象,而不是像 cmbCustomer.SelectedIndex=0;
猜你喜欢
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 2011-10-14
  • 1970-01-01
  • 2011-12-30
  • 2015-02-03
  • 2012-11-26
相关资源
最近更新 更多