1

listbox每次单击按钮时我都想清除addImages它,它会向其中添加新项目,但我在清除它时遇到问题。以下是我的代码:

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)但是这些删除的项目只有在下次单击按钮时才第一次清除列表。我希望每次单击按钮时都清除列表。

4

3 回答 3

0

尝试这个 ..

ImageList.Images.Clear();
listBox.Items.Clear();
于 2013-10-22T11:14:48.570 回答
0

ListBox.Items.Clear应该清除列表,如果每次单击按钮时都需要这样做,那么您需要在事件处理程序中使用它,即

private void addImages_Click(object sender, RoutedEventArgs e)
{
    listBox.Items.Clear();
    // do stuff
}
于 2013-10-22T10:45:45.557 回答
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();
}

*注意我清理了扩展验证

编辑:我刚刚注意到您谈论绑定。那么你的问题很容易。您无法清除绑定到控件的列表。控件将保留原始来源。您只能更新绑定源,否则您需要手动更新绑定。

集合上的绑定就像攀登。

控制是人绳索是数据源(集合)山是你的模型

如果在您的模型中您清除(切断)源(所有绳索),控制(人)仍然持有源(绳索)

如果您希望控制(人)有一个新的来源(绳索),您需要添加一个新的,以便他可以跳上它并删除旧的。

于 2013-10-22T11:22:05.817 回答