Data binding Silverlight双向绑定组合框将值设置为NULL 在我解释我的问题之前,请考虑下面的对象: Character.cs -> AnimationControlSettings.cs .. -> UpControlType (string) .. -> AvailableControlTypes (List<string>) Character.cs ->AnimationControlSettings.cs .. -> UpControlType(字符串) .. -> 可用控制类型(列表)
my ViewModel中的相关属性: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的各种属性),在我在字符之间切换时可以正确地维护它
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}" />
谢谢你,默文,这很有道理。