我有一个组合框,其内容可能会更改。问题在于内容改变时,1)我失去了之前的selectedIndex,并且2)SelectedIndex被设置为-1。 我想要一个MVVM解决方案,而不是一些涉及代码隐藏的解决方案。 我可以在内容更改时将SelectedIndex设置为0,但-1对于我的模型不是有效的值。组合框SelectedIndex在内容更改上丢失
我作为一个'技巧'所做的事情是将属性的setter绑定到SelectedIndex,以将值设置为-1时将值设置为-1。所以现在我没有在我的模型中有不正确的值。但ComboBox不显示“0”项,而是一个空框。
当我的组合框的内容发生变化时,我的组合框会显示第一个项目(索引0)吗?
<ComboBox Name="WeeksComboBox" IsEditable="False"
ItemsSource="{Binding Weeks}"
SelectedIndex="{Binding WeekNumber}"
>
周是一个通知属性是一个字符串列表。当我更改Year属性时,它会发生变化。 WeekNumber是整数类型的通知属性。现在,当它设置为-1时,我将相应的私有成员设置为0,以避免在我的模型中出现错误的值。
我怀疑您正在重新绑定,因为它会将选定索引设置为-1。请将代码粘贴到您绑定的位置以及更改内容的位置。 – Paparazzi 2012-02-21 15:54:56
当你说“它改变了,我改变了一年”,你是否清除这个列表 - 如果是这样,当它被设置为-1,因为没有值(直到你添加新的值)。如果你正在做一个清晰的,然后添加你将需要设置WeekNumber = 0后添加(我会设置公共而不是私人)。我会在列表中使用ObservavleCollection。 – Paparazzi 2012-02-21 16:14:10
使用ObservableCollection将自动通知其项目更改(添加,移动,删除)。此外,如果您替换当前选定的项目,则旧的参考将丢失,因此索引将为-1。您可以使用小型ViewModel来表示WeekNumber,如果项目值发生更改,则更改为内部编号并通知它。 – JoanComasFdz 2012-03-28 10:55:44