Silverlight ComboBox 和 SelectedItem

5
我有以下情景:
1. 列表包含一年中的月份:
public List<String> Months
{
    get
    {
        return m_Months;
    }
}


m_Months = new List<String>();

for (int i = 1; i <= 12; i++)
{
    DateTime date = new DateTime(1900, i, 1);
    m_Months.Add(date.ToString("MMM"));
}

一个ComboBox,其ItemsSource绑定到Months列表,SelectedIndex绑定到属性Month,该属性是一个字符串。
public string Month
        {
            get
            {
                return m_Month;
            }
            set
            {
                if (value != m_Month)
                {
                    m_Month = value;
                    NotifyPropertyChanged("Month");
                }
            }
        }

<ComboBox SelectedItem="{Binding Month, Mode=TwoWay}" ItemsSource="{Binding Months}" />

当我在代码后台设置年份时,例如 Month = "May",这会正确地传播到 ComboBox,并访问 Month 的 getter,但是 ComboBox 没有显示“May”作为其选定的项目。 我想知道:这是 Silverlight 3 中的错误吗? 当我使用 Telerik 的 RadComboBox 时,它运行良好。
2个回答

10

感谢您的回复。我已经尝试了您的建议,但结果相同。然而,我刚刚有了一个霍默·辛普森时刻(D'oh!),发现我在ComboBox设置其ItemsSource之前设置了月份。

奇怪的是,RadComboBox却做得很正确。也许它在ItemsSource更改时重新检索SelectedItem。

编辑:

好吧,我刚刚惊呆了,甚至从椅子上滚了下来。显然,SL3仍然存在一些需要修复的错误。请看下面…

这行不通:

<ComboBox SelectedItem="{Binding Month, Mode=TwoWay}" ItemsSource="{Binding Months}" />

而这个会执行:

<ComboBox ItemsSource="{Binding Months}" SelectedItem="{Binding Month, Mode=TwoWay}" />

注意微小的差别吗?只要我在XAML中在SelectedItem之前设置ItemsSource,世界上就一切正常了。哇哦,我从来不知道XAML是按线性解析的!


希望他们在Silverlight 4中修复了这个问题,但还是感谢您发布这个答案。 - AlignedDev
哇,我们浪费了很多时间来解决这个问题。感谢你发布答案! - Corey O'Brien
1
@Kevin 这在SL4中还没有被修复。 - Rob

0
你是如何设置 Month 属性的?我不确定 ComboBox 如何确定两个项目是否相同,但如果你传入 "May" 而不是 Months[4],它可能无法正确工作。作为一个测试,你可以尝试传入列表中的一个字符串来查看是否解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接