2017-08-02 20 views
3

リストボックスアイテムがListBoxから削除されたときにUserInterfaceを更新する方法。ListBoxItemがデータベースから削除されていますが、リストボックスは更新されません。戻るボタンを押してページに移動すると、リストボックスをリフレッシュする方法を教えてもらえますか?私はそれが観測可能なコレクションのためだと思う、私はNotifyPropertyを実装する方法を知らないこのcode.Can誰も私をしてください助けてください?ListBoxItemがcで削除されたときにListBoxが更新されない#

C#コードは、リストから項目を削除するコードを読み取り、

public class DatabaseHelperClass 
{ 

    SQLiteConnection dbConn; 

    //Create Tabble 
    public async Task<bool> onCreate(string DB_PATH) 
    { 
     try 
     { 
      if (!CheckFileExists(DB_PATH).Result) 
      { 
       using (dbConn = new SQLiteConnection(DB_PATH)) 
       { 
        dbConn.CreateTable<Data>(); 
       } 
      } 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
    private async Task<bool> CheckFileExists(string fileName) 
    { 
     try 
     { 
      var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName); 
      return true; 
     } 
     catch (NullReferenceException exp) 
     { 
      return false; 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
    } 

    // Retrieve the specific contact from the database. 
    public Data ReadContact(int contactid) 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      var existingconact = dbConn.Query<Data>("select * from Contacts where Id =" + contactid).FirstOrDefault(); 
      return existingconact; 
     } 
    } 
    // Retrieve the all contact list from the database. 
    public ObservableCollection<Data> ReadContacts() 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      List<Data> myCollection = dbConn.Table<Data>().ToList<Data>(); 
      ObservableCollection<Data> ContactsList = new ObservableCollection<Data>(myCollection); 

      return ContactsList; 
     } 

} 


    // Insert the new contact in the Contacts table. 
    public void Insert(Data newcontact) 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      dbConn.RunInTransaction(() => 
      { 
       dbConn.Insert(newcontact); 
      }); 
     } 
    } 

    //Delete specific contact 
    public void DeleteContact(int Id) 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      var existingconact = dbConn.Query<Data>("select * from Data where Id =" + Id).FirstOrDefault(); 
      if (existingconact != null) 
      { 
       dbConn.RunInTransaction(() => 
       { 
        dbConn.Delete(existingconact); 
       }); 
      } 
     } 
    } 
    //Delete all contactlist or delete Contacts table 
    public void DeleteAllContact() 
    { 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      //dbConn.RunInTransaction(() => 
      // { 
      dbConn.DropTable<Data>(); 
      dbConn.CreateTable<Data>(); 
      dbConn.Dispose(); 
      dbConn.Close(); 
      //}); 
     } 
    } 
} 

データベース

からアイテムを削除、挿入します。

public partial class Panaroma : Page 
{ 
    ObservableCollection<Data> DB_ContactList = new ObservableCollection<Data>(); 


    public Panaroma() 
    { 
     this.InitializeComponent(); 
     if(listBoxobj.Items.Count == 0) 
     { 
      Btn_Delete.IsEnabled = false; 
     } 


     this.Loaded += Panaroma_Loaded; 

    } 

    private void Panaroma_Loaded(object sender, RoutedEventArgs e) 
    { 
     ReadAllData dbcontacts = new ReadAllData(); 

     DB_ContactList = dbcontacts.GetAllContacts();//Get all DB contacts 
     if (DB_ContactList.Count > 0) 
     { 
      Btn_Delete.IsEnabled = true; 
     } 
     listBoxobj.ItemsSource = DB_ContactList.OrderByDescending(i => i.Id).ToList();//Binding DB data to LISTBOX and Latest contact ID can Display first. 

    } 


    private void listBoxobj_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     int SelectedContactID = 0; 
     if (listBoxobj.SelectedIndex != -1) 
     { 
      Data listitem = listBoxobj.SelectedItem as Data;//Get slected listbox item 
      DatabaseHelperClass Db_Helper = new DatabaseHelperClass(); 
      Db_Helper.DeleteContact(listitem.Id);//Delete selected DB contact Id. 
     } 
    } 
+1

を見てみましょう。また、コレクションから削除し、コレクションをリフレッシュする必要があります。 INotifyPropertyChangedインタフェースの実装には、ここでいくつかの良い例があります。 – Ben

+0

こんにちは@ベン、コレクションから選択したアイテムを削除するには? – Rachel

答えて

2

、コレクションから項目を削除する方法Remove(リストアイテム)msdnを使用して、関連するリストボックスを更新します。リストボックスを更新するには

private void listBoxobj_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    int SelectedContactID = 0; 
    if (listBoxobj.SelectedIndex != -1) 
    { 
     Data listitem = listBoxobj.SelectedItem as Data;//Get slected listbox item 
     DatabaseHelperClass Db_Helper = new DatabaseHelperClass(); 
     Db_Helper.DeleteContact(listitem.Id);//Delete selected DB contact Id. 
     //remove item from collection 
     DB_ContactList.Remove(listitem); 
     //update listbox 
     //... 
    } 
} 

はあなたが唯一のデータベースから選択した項目を削除している。このpost

+0

Thanks @ Ben、問題は解決しました。 – Rachel

関連する問題