2009-06-09 84 views
5

我有以下情形:其中包含了一年中的月份Silverlight的组合框和的SelectedItem

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组合框,其ItemsSource绑定到数月的列表,其SelectedIndex的是绑定的财产一个月,这是一个字符串:

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

当我从代码隐藏,即月=“五一”设定年份,这是正确地传送到ComboBox,和GETT呃月访问,但组合框不会显示'五月',因为它是选定的项目。

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

干杯, 弗朗西斯

回答

10

感谢您的回复。尝试过你的建议,并获得相同的结果。不过,我刚刚做了一个荷马辛普森时刻(Dôh!),发现我在ComboBox设置ItemsSource之前设置了Month。

不过,奇怪的是,RadComboBox能正确处理所有事情。也许它在ItemsSource更改时再次检索SelectedItem。

编辑:

OK,我只是从字面上跌下我的椅子惊奇。显然,SL3仍然有一些需要修复的bug。宴席上下面你的眼睛......

这不起作用:

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

而且这并不:

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

见微小的区别?只要我在XAML中的SelectedItem中设置ItemsSource 之前,一切都很好。 Wowee,我从来不知道XAML是线性分析的!

+0

希望他们有它在Silverlight 4中修复,但感谢张贴这个答案。 – Aligned 2010-04-26 18:12:15

0

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