设置ComboBox.SelectedIndex会破坏绑定到ComboBox.SelectedItem的单向数据源绑定。

3
以下内容出现在数据模板中:
<ComboBox IsSynchronizedWithCurrentItem="False"
          SelectedIndex="0"
          SelectedItem="{Binding Path=Value, Mode=OneWayToSource}"
          ItemsSource="{Binding Path=EnumeratedValues, Mode=OneTime}"/>

设置了 SelectedIndex(如上所示)后,对 ValueOneWayToSource 绑定无法工作。如果我不设置 SelectedIndex,则对 Value 的绑定是正常的。
然而,我真的想将 SelectedIndex 设置为 0,因为如果我省略它,则默认情况下 ComboBox 中没有任何项被选中。
有人能看到我如何在保证 ComboBox 中第一项被默认选中的同时,保持对 Value 的绑定工作吗?

Dave,两个点之间没有显示出任何内容...在数据模板中出现: 和选择的索引被设置(如上所示)... 是否有一些源代码丢失了? - Stewbob
我也遇到了同样的问题,如果有人想说它根本不可能那样工作,那么我感到震惊。此外,SelectedIndex的目的是什么,因为所有的ComboBox都必须绑定到某些东西(否则它们将毫无用处)。 - Ingó Vals
1个回答

1
为什么不使用双向绑定并在代码后台中设置对象的值属性呢?
编辑:添加说明:这样可以直接使用业务对象进行操作。使用数据绑定的重点是将业务对象与 UI 分离,只需操作业务对象,UI 就会反映出来。

我确实考虑过这个问题,但是对于SelectedIndex。无论我为哪个做,由于我试图从中填充值的ComboBox被深埋在数据模板中,而且并不总是使用该数据模板,因此这将会很棘手。我有两个数据模板(另一个没有ComboBox),要使用的那个是由DataTemplateSelector选择的。我不知道如何通过编程方式获取ComboBox(当存在时),因此我努力在XAML中工作。但是我有一种感觉,我将不得不朝你建议的方向前进,并学习如何通过编程实现。 - Dave
我并不是说你应该对数据模板或组合框做任何事情。我是说你要更新你的UI绑定到的业务对象。如果你有双向绑定,UI将会更新以反映这个变化。如果你正确地进行数据绑定,你应该只使用业务对象,而不是像cmbCustomer.SelectedIndex=0这样的操作。 - Jacob Adams

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