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

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

当我从代码隐藏中设置年份时,即 Month =“May”,这会正确传播到 ComboBox,并访问 Month 的 getter,但 ComboBox 不会显示“May”,因为它是选定的项目。

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

干杯,弗朗西丝

4

2 回答 2

10

感谢您的回复。已经尝试过您的建议并获得相同的结果。但是,我刚刚经历了 Homer Simpson 时刻(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 中的 SelectedItem 之前设置 ItemsSource,就万事大吉了Wowee,我从来不知道 XAML 是线性解析的!

于 2009-06-09T03:10:12.433 回答
0

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

于 2009-06-09T03:00:54.653 回答