Ho una pagina in un'app di Windows Phone 7 in cui l'utente può modificare o eliminare un oggetto Transaction. L'oggetto Transaction è una classe Linq-to-Sql che ha una relazione con la classe Account e la classe Category. Nella pagina, io uso un ListPicker per consentire all'utente di selezionare l'account e la categoria per la transazione dato, in questo modo:Errore ListPicker SelectedItem deve sempre essere impostato su un valore valido
<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" />
L'evento ListPicker_Tap è una correzione per un bug nella versione Ago/2011 del WPF Toolkit per Windows Phone ed è semplicemente questo:
private void ListPicker_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
ListPicker lp = (ListPicker)sender;
lp.Open();
}
Se all'utente di modificare la transazione, tutto va bene, ma se l'utente tenta di eliminarlo, ottengo un errore che dice che "SelectedItem deve sempre essere impostato su un valore valido ".
Ecco il codice se l'utente clicca il pulsante di eliminazione nella appbar nelle 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();
}
mio metodo ViewModel.DeleteTransaction:
public void DeleteTransaction(Transaction transaction)
{
AllTransactions.Remove(transaction);
transactionRepository.Delete(transaction);
}
mio transactionRepository.Delete metodo:
public void Delete(Transaction transaction)
{
Context.Transactions.DeleteOnSubmit(transaction);
Context.SubmitChanges();
}
Ho ricevuto l'errore nel Context.SubmitChanges() L'esecuzione, i punti di debug al NotifyPropertyChanged all'interno della classe Transaction, la linea dove ottengo l'errore è questo:
protected virtual void SendPropertyChanged(String propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Nel propertyName attribuiscono il valore è "Categoria". Sembra che quando si elimina l'oggetto invii l'evento propertychanged di categoria e account, e poiché il listpicker è in modalità TwoWay, ha qualche problema nel gestirlo. Come posso ripararlo? Ho bisogno di aiuto.
è possibile collegare il pieno XAML? O se è troppo lungo, XAML parziale andrà bene finché si vedrà che cosa {{Binding Account, Mode = TwoWay} 'e' {Binding Category, Mode = TwoWay} 'si riferiscono. – Amry