2013-10-22 59 views
1

每次點擊addImages按鈕時,我都想清除listbox,該按鈕會向其中添加新項目,但我在清除它時遇到問題。以下是我的代碼:以編程方式清空列表框

private void addImages_Click(object sender, RoutedEventArgs e) 
{ 
    FileInfo Images; 
    string[] filenames = null; 
    System.Windows.Forms.FolderBrowserDialog folderDlg = new System.Windows.Forms.FolderBrowserDialog(); 
    folderDlg.ShowNewFolderButton = true; 
    System.Windows.Forms.DialogResult result = folderDlg.ShowDialog(); 

    if (result == System.Windows.Forms.DialogResult.OK) 
    { 
     filenames = System.IO.Directory.GetFiles(folderDlg.SelectedPath); 

     foreach (string image in filenames) 
     { 
      Images = new FileInfo(image); 

      if(Images.Extension.ToLower() == ".png" || Images.Extension.ToLower() == ".jpg" || Images.Extension.ToLower() == ".gif" || Images.Extension.ToLower() == ".jpeg" || Images.Extension.ToLower() == ".bmp" || Images.Extension.ToLower() == ".tif") 
      { 
       ImageList.Items.Add(new LoadImages(new BitmapImage(new Uri(image)))); 
      } 
     } 
    } 
} 

我已經試過ImageList.items.clear()BindingOperations.ClearAllBindings(ImageList)但這些刪除的項目,只有當按鈕被點擊下一次開始,他們就不會清空列表第一次。每次單擊按鈕時,我都希望清單被清除。

+0

這是WinForms,而不是WPF。你能改變你的標籤嗎? –

+0

只是簡單的說明,你可以做'if(folderDlg.ShowDialog()== DialogResult.OK)'而不是將它存儲在一個你不會再使用的變量中。 – sab669

回答

0

下面的這段代碼應該可以正常工作。這可能是有問題的唯一

private void addImages_Click(object sender, RoutedEventArgs e) 
{ 
    ImageList.Items.Clear(); 
    RefreshList(); 

    FileInfo Images; 
    string[] filenames = null; 
    System.Windows.Forms.FolderBrowserDialog folderDlg = new System.Windows.Forms.FolderBrowserDialog(); 
    folderDlg.ShowNewFolderButton = true; 
    System.Windows.Forms.DialogResult result = folderDlg.ShowDialog(); 

    if (result == System.Windows.Forms.DialogResult.OK) 
    { 
     filenames = System.IO.Directory.GetFiles(folderDlg.SelectedPath); 

     foreach (string image in filenames) 
     { 
      Images = new FileInfo(image); 

      if(new string[]{".png", ".jpg", ".gif", ".jpeg", ".bmp", ".tif"}.Contains(Images.Extension.ToLower())) 
      { 
       ImageList.Items.Add(new LoadImages(new BitmapImage(new Uri(image)))); 
      } 
     } 
    } 

    RefreshList(); 
} 

private void RefreshList() 
{ 
    // Force visual refresh of control 
    ImageList.Refresh(); 
} 

*注意:我清理了擴展驗證

編輯:我剛纔注意到你談論綁定。那麼你的問題很容易。您無法清除綁定到控件的列表。控制將保持原始來源。您只能更新綁定源,否則您需要手動更新綁定。

集合上的綁定就像一個攀登。

控制是人 繩索是數據源(集合) 山是你的模型

如果你的模型,你清楚(切)源(全繩) 控制(人)仍持有源(繩索)

如果你想控制(人)有一個新的來源(繩) 你需要添加一個新的,以便他可以跳過去除舊的。

0

ListBox.Items.Clear應清除該列表,如果你需要這樣的事情發生時間的按鈕被點擊,那麼你需要在你的事件處理程序即

private void addImages_Click(object sender, RoutedEventArgs e) 
{ 
    listBox.Items.Clear(); 
    // do stuff 
} 
+0

我已經嘗試過,它只在按下按鈕後纔會第一次刪除項目。 – Badrul

+0

@badrulmuneer查看更新,當我最初回答時,您已將其標記爲「WPF」。 – James

0

試試這個..

ImageList.Images.Clear(); 
listBox.Items.Clear();