У меня есть страница в приложении 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, у него возникают некоторые проблемы с его обработкой. Как я мог это исправить? Мне нужна помощь.