Windows Phone 7 - Отмена выбора ListBoxItem во вложенных ListBoxes - PullRequest
0 голосов
/ 12 октября 2010

У меня есть ListBox с датами.
Каждый ListBoxItem (date) имеет другой ListBox с событиями этой даты.

Когда я выбираю событие, оно подсвечивается (SelectedIndex / SelectedItem), и я перехожу к другому Pivot. Это отлично работает.

Моя проблема в том, что каждый ListBox имеет свой собственный SelectedItem. Я хочу очистить SelectedItem от каждого ListBox, но не могу заставить его работать!

Вот моя попытка:

    //Store a reference to the latest selected ListBox
    public ListBox SelectedListBox { get; set; }

    private void SelectionChangedHandler(object sender, SelectionChangedEventArgs e)
    {
        ListBox lstBox = ((ListBox)sender);

        //This row breaks the SECOND time!!
        var episode = (Episode)lstBox.SelectedItem;   

        episodeShowName.Text = episode.Show; //Do some code
        episodeTitle.Text = episode.Name; //Do some code
        episodeNumber.Text = episode.Number; //Do some code
        episodeSummary.Text = episode.Summary; //Do some code

        resetListBox(lstBox); //Do the reset !

        pivot1.SelectedIndex = 1;
    }


    private void resetListBox(ListBox lstBox)
    {
        if (SelectedListBox != null)
            SelectedListBox.SelectedIndex = -1;

        //If I remove this line, the code doesn't break anymore
        SelectedListBox = lstBox; //Set the current ListBox as reference
    }

var эпизод равен нулю во второй раз. Как получилось?

1 Ответ

1 голос
/ 13 октября 2010

Я нашел проблему!

private void resetListBox(ListBox lstBox)
{
    if (SelectedListBox != null)
        SelectedListBox.SelectedIndex = -1;

    //If I remove this line, the code doesn't break anymore
    SelectedListBox = lstBox; //Set the current ListBox as reference
}

Когда я устанавливаю SelectedIndex для предыдущего выбранного ListBox в -1 , событие SelectionChangedHandler запускается снова (конечно) и облажается! : D

Легко исправить:

    private void SelectionChangedHandler(object sender, SelectionChangedEventArgs e)
    {
        ListBox lstBox = ((ListBox)sender);
        if (lstBox.SelectedIndex < 0)
            return;
...