ユーザーがサブアイテムを動的に作成できるようにするWPFアプリケーションがありますtreeview
。これらのサブ項目は、別のウィンドウから作成され、メイン ウィンドウに追加されます。別のウィンドウからメイン ウィンドウのサブアイテムを削除する delete メソッドも実装したいと思います。
これらはいくつかのコードと一緒に私の考えです:
//Okay button -- Delete sub-items in main window TreeView
private void button2_Click(object sender, RoutedEventArgs e)
{
//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;
//Name of header that needs to be located
string header = textBox1.Text;
//While treeview from main window contains subitems
while (!mainWindow.treeView.Items.IsEmpty)
{
//Find TreeView subitem with matching header
//? - not sure on code
//Delete TreeView subitem
//I'm guessing it has something to do with
//mainWindow.treeView.Items.Remove(At?)....
}
}
私のコメントは、私が確信していないことを示しています。mainWindow を正しくクエリし、検索するヘッダーの文字列値を設定しました。を検索するループを設定しましたtreeview
が、ジョブを完了するための正確なコードがわかりません。私が使用すべきコードを教えてください。
回答に基づいて修正されたコード
私はあなたの答えを理解するために最善を尽くしています。コメントで何をしようとしているのかを説明しました。私は正しい軌道に乗っていると思いますが、使用しようとすると小さなコンパイラ エラーが発生しますRemoveAll
。ある種の a を含める必要がありますusing resourceDictionary
か?
コードの改訂
私に固執してくれてありがとう。コンパイラは、 への呼び出しに対してまだエラーを出していますRemoveAll
。
//Okay button -- Delete location and corrusponding block
private void button2_Click(object sender, RoutedEventArgs e)
{
//Close Delete Window
this.Close();
//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;
//Name of header that needs to be located
string header = textBox1.Text;
//Treeview under operation from main window
TreeViewItem items = mainWindow.treeViewItem;
//Delete corresponding node
RemoveAll(items, p => string.Equals(p.Header, header));
}
//REMOVE ALL METHOD - for use with button_click ^
public void RemoveAll(ItemCollection items, Predicate<TreeViewItem> isValid)
{
for (int i = items.Count - 1; i >= 0; i--)
{
TreeViewItem vItem = (TreeViewItem)items[i];
if (isValid(vItem))
{
items.RemoveAt(i);
}
else
{
RemoveAll(vItem.Items, isValid);
}
}
}
ビルドエラー
エラー 1: '...(プロジェクト)...' に最適なオーバーロードされたメソッドに無効な引数が含まれています。
エラー 2: 引数 '1':System.Windows.Controls.TreeViewitem
から `System.Windows.Controls.ItemCollection' に変換できません。
ありがとうございました。