Silverlight ComboBox和SelectedItem

时间:2009-06-09 02:45:21

标签: c# silverlight-3.0

我有以下情况:

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"));
}

1个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}" />

当我从代码隐藏设置Year时,即Month =“May”,这被正确传播到ComboBox,并且访问了Month的getter,但是ComboBox没有显示'May'作为它的选择项。

我想知道:这是Silverlight 3中的一个错误吗?当我使用Telerik的RadComboBox时,它工作正常。

干杯, 弗朗西丝

2 个答案:

答案 0 :(得分:10)

感谢您的回复。尝试过你的建议并获得相同的结果。然而,我刚刚有一个荷马辛普森时刻(Dôh!)并且发现我在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中将ItemsSource 设置为之前的SelectedItem,一切都在世界上很好。 Wowee,我从来不知道XAML是线性解析的!

答案 1 :(得分:0)

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