Почему реализация ObservableCollection приводит к сбою моего приложения silverlight? - PullRequest
0 голосов
/ 14 июня 2009

У меня есть выпадающий список, свойство ItemsSource которого связано со свойством ObservableCollection, а его свойство SelectedIndex связано со свойством целого числа соответственно.

<ComboBox Name="cmbDealt" ItemsSource="{Binding Path=DealList, Mode=TwoWay}" SelectedIndex="{Binding Mode=TwoWay, Path=DealIndex}"></ComboBox>
<CheckBox IsChecked="{Binding Mode=TwoWay, Path=SomeCondition}" Content="Some Condition"></CheckBox>

Моя структура данных выглядит как

 private ObservableCollection<string> m_DealList = null;
    private int m_DealIndex = 0;
    private bool m_SomeCondition = false;

    public ObservableCollection<string> DealList
    {
        get
        {
            if (m_DealList == null)
                m_DealList = new ObservableCollection<string>();
            else
                m_DealList.Clear();

            if (m_SomeCondition)
            {
                m_DealList.Add("ABC");
                m_DealList.Add("DEF");
            }
            else
            {
                m_DealList.Add("UVW");
                m_DealList.Add("XYZ");
            }
            return m_DealList;
        }
    }

    public int DealIndex
    {
        get { return m_DealIndex; }
        set
        {
            if (value != -1)
            {
                m_DealIndex = value;
            }
        }
    }

    public bool SomeCondition
    {
        get { return m_SomeCondition; }
        set
        {
            m_SomeCondition = value;
            OnPropertyChanged("DealList");
            OnPropertyChanged("DealIndex");
        }
    }

Теперь приложение успешно загружается. Однако, когда пользователь изменяет SelectedIndex ComboBox на 1 с 0, а затем устанавливает флажок (чтобы вызвать событие изменения свойства DealIndex), происходит сбой приложения.

Я не уверен, почему это могло произойти. Может кто-нибудь пролить свет и предложить решение?

ТИА ... Sudeep

Ответы [ 2 ]

0 голосов
/ 15 апреля 2010

Вам не нужно стрелять

OnPropertyChanged("DealList");

, поскольку свойство является ObservableCollection. Это означает, что он реализует паттерн наблюдателя, а когда элементы добавляются и удаляются, он срабатывает сам по себе.

Вам не нужно устанавливать режим привязки ObservableCollection равным TwoWay, если только пользователь не может обновить элементы через пользовательский интерфейс. Похоже, ваш код не позволяет этого.

Вы также можете просто использовать SelectedIndexChanged на ComboBox вместо выполнения действия с CheckBox, если только нет нескольких CheckBox. Это всего лишь мысль о том, чтобы обеспечить лучшее взаимодействие с пользователем.

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

Одним из вариантов будет изменение привязки с selectedindex на selecteditem. Вы можете сделать то же самое. Я изначально начал с попытки изменить выбранный индекс, и я никогда не был успешным. Я думаю, что это может быть только для чтения.

...