Я новичок в TreeView
в WPF: C#, и я учусь работать с динамически созданным TreeViewItems
. Прямо сейчас моя программа позволяет пользователю создавать динамические TreeViewItems
, а затем удалять их. В качестве следующего шага я хотел бы запрограммировать возможность переименовывать эти динамические элементы. Теоретически этот процесс не требует пояснений, однако я не знаю, что делать с кодом C#.
Прежде всего, я хотел бы обрисовать свой процесс переименования, чтобы показать, где именно мне нужна помощь.
- Пользователь щелкает правой кнопкой мыши на
TreeViewItem
contextMenu
падает вниз (ГОТОВО)- Пользователь нажимает «Переименовать...», и открывается окно (ГОТОВО)
- Имя
TreeViewItem
внесено вtextBox
(ГОТОВО) - Если текст в
textBox
соответствуетheader
вTreeView
mainWindow, открывается другое окно, которое позволяет пользователю ввести новое имя дляTreeViewItem
. (НЕПОЛНЫЙ) - Когда имя вводится в новом окне, пользователь нажимает кнопку ввода, и имя элемента изменяется на то, что было введено в поле
textBox
. (НЕПОЛНЫЙ)
Вот мой код для шага 5, где программа должна убедиться, что введенное header
существует в файле TreeView
. В областях, где я не уверен в правильности кода, у меня есть псевдокод.
//ENTER - Select TreeViewItem, open enterName window
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;
//If(textbox1.text == one of the treeViewItem headers)
var newWindow = new EnterCartName();
newWindow.Show();
//else,
//MessageBox.Show("Value entered does not match a current cart name");
//this.Close();
}
Что касается шага 6, я понимаю, как добавить TreeViewItem
с динамически созданным header
, но я не знаю, как получить и переименовать существующий. Это мой код:
//ENTER - Change cart name
private void button2_Click(object sender, RoutedEventArgs e)
{
this.Close(); //close Window
//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;
//mainWindow.treeViewItem.Header(TVI gotten from previous window) = textBox1.Text;
}
Я думаю, что моя главная проблема с динамическими TreeView
активами заключается в том, что я чувствую, что они невидимы для меня. Как мне с ними работать, если я не знаю, как они называются и как правильно на них ссылаться. Если вы знаете какие-либо руководства или ресурсы по этой теме, пожалуйста, поделитесь ими.
Большое спасибо.
Мое окончательное решение:
//Now Global
bool hasFoundMatch;
//ENTER - Select cart, open enter name window
private void button2_Click(object sender, RoutedEventArgs e)
{
string input, output;
//Query for Window1
var mainWindow = Application.Current.Windows
.Cast<Window1>()
.FirstOrDefault(window => window is Window1) as Window1;
//Get TreeViewItem from mainWindow
TreeViewItem renameCart = mainWindow.cartTypes_TI;
input = textBox1.Text;
output = textBox2.Text;
//Check if header exists
hasFoundMatch = CheckItemHeader(renameCart.Items, input);
//if header exists - set new header
//Else - show message box
if (hasFoundMatch == true)
SetItemHeader(renameCart.Items, input, output);
else
MessageBox.Show("Value entered does not match a current cart name.");
//close window
this.Close();
}
//Checks to see whether the user entered header exists
private bool CheckItemHeader(ItemCollection treeViewItems, string input)
{
bool hasFoundMatch = false;
for (int index = 0; index < treeViewItems.Count; index++)
{
TreeViewItem item = (TreeViewItem)treeViewItems[index];
string header = item.Header.ToString();
if(header == input)
{
hasFoundMatch = true;
break;
}
else
hasFoundMatch = false;
}
return hasFoundMatch;
}
//Changes the selected TVI header
private void SetItemHeader(ItemCollection treeViewItems, string input, string output)
{
for (int index = 0; index < treeViewItems.Count; index++)
{
TreeViewItem item = (TreeViewItem)treeViewItems[index];
string header = item.Header.ToString();
if (header == input)
{
item.Header = output;
break;
}
}
}
TreeViewItem
, так и новое имя в одном и том же окне? 29.07.2013ItemCollection
изTreeView
в методCheckItemHeader
, а не только одинTreeViewItem
... если только все остальныеTreeViewItem
не являются его дочерними элементами. Вам придется отладить эти методы, чтобы увидеть, какие элементы передаются... вы единственный, кто может это сделать. 29.07.2013TreeViewItem
, потому что хочу иметь дело только с его дочерними элементами. Так что в таком случае я должен отлаживать? 29.07.2013