【问题标题】:Remove an item from listbox in WP8从 WP8 的列表框中删除一个项目
【发布时间】:2013-11-03 17:09:26
【问题描述】:

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

public class MyDataClass 
{ 
    public string MSG { get; set; } 
    public int Id { get; set; } 
}

然后我尝试删除选中的项目(Button1_Click 事件)

MyDataClass item = MyDict.SelectedItem as MyDataClass; 
ObservableCollection dataList = new ObservableCollection(); 
dataList.Remove(item);

在task中创建datalist的问题,其他程序都无法使用,怎么改?

    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;
    }

【问题讨论】:

    标签: windows-phone-8 listbox windows-phone listboxitem


    【解决方案1】:

    你可以绑定到任务外部的数据列表,并让数据列表静态或在任务中引用它吗?

    创建列表时:

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

    然后在任务中:

    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();
        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);
    

    或者成功:

    创建列表时:

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

    然后在任务中:

    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);
    

    当然你需要等到任务完成。

    【讨论】:

      【解决方案2】:

      您似乎正试图从一个全新的集合中删除该项目 - 而是尝试从您的列表框数据绑定到的那个集合中删除它。

      【讨论】:

        【解决方案3】:

        尝试使用按钮数据上下文

        喜欢这个

        在您的点击处理程序中

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

        【讨论】:

        • 现在,这不起作用。我创建了新的 ObservableCollection,因为我的程序中没有它
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        • 2010-11-29
        相关资源
        最近更新 更多