【问题标题】:Silverlight TwoWay-bound ComboBox setting values to NULLSilverlight TwoWay-bound ComboBox 将值设置为 NULL
【发布时间】:2010-10-19 01:10:03
【问题描述】:

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

Character.cs

-> AnimationControlSettings.cs

..  -> UpControlType (string)

..  -> AvailableControlTypes (List<string>)

我的 ViewModel 中的相关属性:

Character SelectedCharacter
ObservableCollection<Character> Characters

我有一个简单的视图,您可以在其中使用组合框选择一个字符。 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 属性在您切换 Characters 时仍然存在,但 UpControlType 值设置为 NULL。

我在这里遗漏了什么明显的东西吗?

【问题讨论】:

    标签: data-binding silverlight-4.0 combobox


    【解决方案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}" />
    

    【讨论】:

    • 谢谢 Murven,这很有意义。
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2015-03-14
    • 2023-04-10
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多