Silverlight ComboBox и SelectedItem - PullRequest
5 голосов
/ 09 июня 2009

У меня есть следующий сценарий:

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

Когда я устанавливаю год из кодовой области, т. Е. Месяц = ​​"Май", он правильно передается в ComboBox, и получатель доступа к Месяцу доступен, но ComboBox не отображает "Май" в качестве выбранного элемента.

Я хотел бы знать: это ошибка в Silverlight 3? Он отлично работает, когда я использую RadComboBox от Telerik.

Cheers, Франческа

Ответы [ 2 ]

10 голосов
/ 09 июня 2009

Спасибо за ваш ответ. Попробовал ваше предложение уже и получить те же результаты. Однако у меня только что был момент Гомера Симпсона (Dôh!), И я обнаружил, что я установил Месяц, прежде чем ComboBox установит его ItemsSource.

Странно, однако, что RadComboBox все делает правильно. Возможно, он снова извлекает SelectedItem при изменении ItemsSource.

EDIT:

ОК, я буквально с изумлением упал со стула. По-видимому, в SL3 все еще есть ошибки, которые нужно исправить. Полюбуйтесь на следующее ...

Это не работает:

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

И это делает:

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

Видите крошечную разницу? Пока я устанавливаю ItemsSource перед SelectedItem в XAML, в мире все хорошо. Вау, я никогда не знал, что XAML анализируется линейно!

0 голосов
/ 09 июня 2009

Как вы устанавливаете свойство Month? Я не уверен, как ComboBox определяет, являются ли два элемента одинаковыми или нет, но я мог видеть, что это не будет работать правильно, если вы передадите "май", а не Months[4]. В качестве теста вы можете попробовать передать одну из строк из вашего списка, чтобы посмотреть, решит ли это проблему или нет.

...