Data binding Silverlight双向绑定组合框将值设置为NULL 在我解释我的问题之前,请考虑下面的对象: Character.cs -> AnimationControlSettings.cs .. -> UpControlType (string) .. -> AvailableControlTypes (List<string>) Character.cs ->AnimationControlSettings.cs .. -> UpControlType(字符串) .. -> 可用控制类型(列表)

Data binding Silverlight双向绑定组合框将值设置为NULL 在我解释我的问题之前,请考虑下面的对象: Character.cs -> AnimationControlSettings.cs .. -> UpControlType (string) .. -> AvailableControlTypes (List<string>) Character.cs ->AnimationControlSettings.cs .. -> UpControlType(字符串) .. -> 可用控制类型(列表),data-binding,silverlight-4.0,combobox,Data Binding,Silverlight 4.0,Combobox,my ViewModel中的相关属性: Character SelectedCharacter ObservableCollection<Character> Characters 字符选择字符 可观测采集特征 我有一个简单的视图,您可以使用组合框选择一个角色。组合框的SelectedItem双向绑定到ViewModel的SelectedCharacter属性。还有其他文本框/复选框(也双向绑定到SelectedCharacter的各种属性),在我在字符之间切换时可以正确地维护它

my ViewModel中的相关属性:

Character SelectedCharacter
ObservableCollection<Character> Characters
字符选择字符
可观测采集特征
我有一个简单的视图,您可以使用组合框选择一个角色。组合框的SelectedItem双向绑定到ViewModel的SelectedCharacter属性。还有其他文本框/复选框(也双向绑定到SelectedCharacter的各种属性),在我在字符之间切换时可以正确地维护它们的值

绑定到UpControlType属性的组合框中存在问题:

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

初始值正确显示在此组合框中,但一旦我从CharacterA切换到CharacterB,CharacterA的UpControl属性就设置为NULL,我不知道为什么

以下是对这一问题的赤裸裸的复制(VS2010,SL4):

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


我是否遗漏了一些明显的内容?

您正在将第三个组合框的项目源绑定到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}" />

谢谢你,默文,这很有道理。