ListPicker に、分離ストレージを使用して項目が取り込まれた listPicker1 と言うものがあります。listPicker1 の任意の項目を長押し (ホールド) すると、「削除」、「キャンセル」などのオプションを含むコンテキスト メニューが表示されます。 Delete'、私は lisPicker1 からその項目を削除したいのですが、DeleteEvent Handler で長押しされた項目のインデックスまたは実際のデータを取得できないため、実行できません (GestureListener_Hold を使用しようとしても無駄でした)。以下は私が試したコードです。可能であれば、PLは私を助けてくれます。前もって感謝します。
<toolkit:ListPicker SelectionChanged="listPicker1_SelectionChanged" FontSize="24" ItemCountThreshold="1" Name="listPicker1" Margin="6,0,102,513" ListPickerMode="Full" Height="72" VerticalAlignment="Bottom" >
<toolkit:ListPicker.ItemTemplate >
<DataTemplate x:Name="PickerFullModeItemTemplate">
<StackPanel x:Name="sp" Orientation="Horizontal" >
<TextBlock x:Name="txt" Text="{Binding ContactName}" Margin="16 0 0 0" FontSize="35" />
<TextBlock Name="number" Text="{Binding ContactNumber}" Foreground="Azure" FontSize="28"/>
<toolkit:ContextMenuService.ContextMenu >
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Delete" Click="MenuItem_Click" />
<toolkit:MenuItem Header="Cancel" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</StackPanel>
</DataTemplate>
</toolkit:ListPicker.ItemTemplate>
</toolkit:ListPicker>
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
SaveNumber data = (sender as ListPicker).SelectedItem as SaveNumber; //nullRef exception here//
if (MessageBox.Show("Are you sure you want to delete the contact from list?", "Delete Contact", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Indent = true;
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("People.xml", FileMode.Create))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<SaveNumber>));
using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))
{
serializer.Serialize(xmlWriter, DeletePersonData(data));
this.listPicker1.ItemsSource = data2;
}
}
}
}
}
private List<SaveNumber> DeletePersonData(SaveNumber ob)
{
//data2.RemoveAt(listPicker1.SelectedIndex); //selected index is always set to 1//
this.data2.Remove(ob);
return data2;
}