Windows phone 8 从WP8中的列表框中删除项目

Windows phone 8 从WP8中的列表框中删除项目,windows-phone-8,listbox,windows-phone,listboxitem,Windows Phone 8,Listbox,Windows Phone,Listboxitem,我是windows phone开发的新手。我正在尝试从列表框中删除所选项目。我有数据类 public class MyDataClass { public string MSG { get; set; } public int Id { get; set; } } 然后我尝试删除所选项目(按钮1\u单击事件) 在任务中创建数据列表时出现的问题,使程序的其余部分无法使用,如何更改 public async Task GETFROMDB() {

我是windows phone开发的新手。我正在尝试从列表框中删除所选项目。我有数据类

public class MyDataClass 
{ 
    public string MSG { get; set; } 
    public int Id { get; set; } 
}
然后我尝试删除所选项目(按钮1\u单击事件)

在任务中创建数据列表时出现的问题,使程序的其余部分无法使用,如何更改

    public async Task GETFROMDB()
    {
        int a = 1;
        Database database = new Database(ApplicationData.Current.LocalFolder, "DictData.db");
        await database.OpenAsync();
        string query = "SELECT * FROM MyDICT";
        Statement statement = await database.PrepareStatementAsync(query);
        statement.EnableColumnsProperty();
        ObservableCollection<MyDataClass> dataList = new ObservableCollection<MyDataClass>();
        while (await statement.StepAsync())
        {
            rawData = string.Format(statement.Columns["value"]);
            string[] sep = new string[] { "\r\n" }; //Splittng it with new line
            string[] arrData = rawData.Split(sep, StringSplitOptions.RemoveEmptyEntries);
            foreach (var d in arrData)
            {
                dataList.Add(new MyDataClass() { MSG = d, Id= a });
                a++;
            }
        }
        MyDict.ItemsSource = dataList;
    }
公共异步任务GETFROMDB() { INTA=1; 数据库=新数据库(ApplicationData.Current.LocalFolder,“DictData.db”); wait database.OpenAsync(); string query=“从MyDICT中选择*”; 语句=等待数据库.PrepareStatementSync(查询); 语句。EnableColumnsProperty(); ObservableCollection dataList=新的ObservableCollection(); while(wait语句.stepsync()) { rawData=string.Format(statement.Columns[“value”]); string[]sep=newstring[]{“\r\n”};//用新行拆分它 string[]arrData=rawData.Split(sep,StringSplitOptions.removeMptyEntries); foreach(arrData中的var d) { Add(新的MyDataClass(){MSG=d,Id=a}); a++; } } MyDict.ItemsSource=数据列表; }
您似乎试图从全新的集合中删除该项目-尝试将其从列表框数据绑定到的集合中删除。

尝试使用按钮数据上下文

像这样

在单击处理程序中

      private void ButtonClick(object sender, RoutedEventArgs e)
      {
         Button btn = sender as Button;
         if (btn != null)
          {
             MyDataClass item = btn.DataContext as MyDataClass; 
             dataList.Remove(item);
          }

        }

您可以在任务外部绑定到数据列表,并在任务中静态或引用数据列表吗

创建列表时:

static ObservableCollection<MyDataClass> dataList = new ObservableCollection<MyDataClass>(); 
MyDict.ItemsSource = dataList;
ObservableCollection<MyDataClass> dataList = new ObservableCollection<MyDataClass>(); 
MyDict.ItemsSource = dataList;
然后在中单击:

MyDataClass item = MyDict.SelectedItem as MyDataClass; 
dataList.Remove(item);
或使其成功:

创建列表时:

static ObservableCollection<MyDataClass> dataList = new ObservableCollection<MyDataClass>(); 
MyDict.ItemsSource = dataList;
ObservableCollection<MyDataClass> dataList = new ObservableCollection<MyDataClass>(); 
MyDict.ItemsSource = dataList;

当然,您需要等待任务完成。

现在,这不起作用。我创建了新的ObservableCollection,因为我的程序中没有它
public async Task GETFROMDB(ObservableCollection<MyDataClass> dataList)
{
    int a = 1;
    Database database = new Database(ApplicationData.Current.LocalFolder, "DictData.db");
    await database.OpenAsync();
    string query = "SELECT * FROM MyDICT";
    Statement statement = await database.PrepareStatementAsync(query);
    statement.EnableColumnsProperty();
    while (await statement.StepAsync())
    {
        rawData = string.Format(statement.Columns["value"]);
        string[] sep = new string[] { "\r\n" }; //Splittng it with new line
        string[] arrData = rawData.Split(sep, StringSplitOptions.RemoveEmptyEntries);
        foreach (var d in arrData)
        {
            dataList.Add(new MyDataClass() { MSG = d, Id= a });
            a++;
        }
    }
}
 MyDataClass item = MyDict.SelectedItem as MyDataClass; 
 dataList.Remove(item);