Silverlight TwoWay绑定的ComboBox设置值为NULL

时间:2010-10-19 01:10:03

标签: data-binding silverlight-4.0 combobox

在我解释我的问题之前,请考虑以下对象:

Character.cs

-> AnimationControlSettings.cs

..  -> UpControlType (string)

..  -> AvailableControlTypes (List<string>)

我的ViewModel中的相关属性:

Character SelectedCharacter
ObservableCollection<Character> Characters

我有一个简单的视图,您可以使用ComboBox选择一个角色。 ComboBox的SelectedItem是两个绑定到ViewModel的SelectedCharacter属性的。还有其他文本框/复选框(也是双向绑定到SelectedCharacter的各种属性),当我在字符之间切换时,它们可以正确地保持它们的值。

绑定到UpControlType属性的ComboBox中存在问题:

<ComboBox x:Name="lstUpControlTypes" 
        ItemsSource="{Binding Path=SelectedCharacter.AnimationControlSettings.AvailableControlTypes}" 
        SelectedItem="{Binding Path=SelectedCharacter.AnimationControlSettings.UpControlType, Mode=TwoWay}">
</ComboBox>

初始值正确显示在此ComboBox中,但只要我从CharacterA切换到CharacterB,CharacterA的UpControl属性就会设置为NULL,我不明白为什么。

这是这个确切问题的准系统复制品(VS2010,SL4): http://www.checksumlabs.com/source/TwoWayBindingWorkshop.zip

如果运行该解决方案,您会看到Name属性在切换字符时仍然存在,但UpControlType值设置为NULL。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

您将第三个组合框的项目源绑定到SelectedCharacter内的属性,如下所示:

ItemsSource="{Binding SelectedCharacter.AnimationControlSettings.AvailableControlTypes}" 

这意味着当SelectedCharacter更改时,该组合框的项目源将被重置,这将激活您在同一组合框的SelectedItem中设置的双向绑定,将您的属性设置为null:

SelectedItem="{Binding SelectedCharacter.AnimationControlSettings.UpControlType, Mode=TwoWay}"

我能够通过将属性AvailableControlTypes移动到CharacterViewModel类来解决问题,这意味着当您更改字符时,可用类型保持不变。如果在您的情况下这是可以接受的,它将解决您的问题:

            <ComboBox x:Name="lstUpControlTypes" 
                      ItemsSource="{Binding AvailableControlTypes}" 
                      SelectedItem="{Binding     SelectedCharacter.AnimationControlSettings.UpControlType, Mode=TwoWay}" />