Ошибка Listpicker. Для SelectedItem всегда должно быть задано допустимое значение

У меня есть страница в приложении Windows Phone 7, где пользователь может редактировать или удалять объект Transaction. Объект Transaction - это класс Linq-to-Sql, который связан с классом Account и классом Category.На странице я использую ListPicker, чтобы позволить пользователю выбрать учетную запись и категорию для данной транзакции, например:

<toolkit:ListPicker Grid.Row="1" FullModeHeader="Choose the Account" FullModeItemTemplate="{StaticResource FullModeItemTemplate}" ExpansionMode="FullScreenOnly" Background="#26000000" Margin="10,0,10,0" Name="Account" SelectedItem="{Binding Account, Mode=TwoWay}" Tap="ListPicker_Tap" />

<toolkit:ListPicker Grid.Row="7" FullModeHeader="Choose the Category" FullModeItemTemplate="{StaticResource FullModeItemTemplate}" ExpansionMode="FullScreenOnly" Background="#26000000" Margin="10,0,10,0" Name="Category" SelectedItem="{Binding Category, Mode=TwoWay}" Tap="ListPicker_Tap" />

Событие ListPicker_Tap - это исправление ошибки в версии WPF Toolkit для Windows Phone от августа 2011 г. и это просто:

    private void ListPicker_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        ListPicker lp = (ListPicker)sender; 
        lp.Open();
    }

Если пользователь редактирует транзакцию, все в порядке, но если пользователь пытается удалить ее, я получаю сообщение об ошибке, в котором говорится, что «SelectedItem всегда должен иметь допустимое значение».

Вот код, если пользователь нажимает кнопку удаления на панели приложения в TransactionPage.xaml.cs:

    private void appBarDelete_Click(object sender, EventArgs e)
    {
        MessageBoxResult result = MessageBox.Show("Are you sure?\n", "Confirm", MessageBoxButton.OKCancel);

        if (result == MessageBoxResult.OK)
        {
            App.ViewModel.DeleteTransaction(transaction);
        }

        NavigationService.GoBack();
    }

Мой метод ViewModel.DeleteTransaction:

    public void DeleteTransaction(Transaction transaction)
    {
        AllTransactions.Remove(transaction);
        transactionRepository.Delete(transaction);
    }

Мой метод transactionRepository.Delete:

    public void Delete(Transaction transaction)
    {
        Context.Transactions.DeleteOnSubmit(transaction);
        Context.SubmitChanges();
    }

Я получаю сообщение об ошибке при выполнении Context.SubmitChanges () отладка указывает на NotifyPropertyChanged внутри класса Transaction, строка, в которой я получаю ошибку, следующая:

    protected virtual void SendPropertyChanged(String propertyName)
    {
        if ((this.PropertyChanged != null))
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

В атрибуте propertyName значение равно «Category». Похоже, что при удалении объекта отправляется событие propertychanged категории и учетных записей, и поскольку средство выбора списка находится в режиме TwoWay, у него возникают некоторые проблемы с его обработкой. Как я мог это исправить? Мне нужна помощь.

10
задан Alaor 10 October 2011 в 23:08
поделиться