У меня есть WinForms TreeView для представления данных моего калькулятора.Когда я читаю свои данные, я создаю свой TreeView и помечаю каждый узел TreeView соответствующим объектом.Ниже приведен пример TreeView.
SUM
SUM
TIMES
UnitsSold
UnitPrice
IncomeFromContracts
NEGATIVE SUM
Rent
Wages
TIMES
UnitsSold
UnitMaterialCost
Я создаю TreeView из структуры данных, такой как:
class Operand {
bool IsNegated {get; set;}
}
class Operator : Operand {
enum OperatorEnum { SUM, DIFFERENCE, TIMES }
OperatorEnum MyEnum {get; set;}
IList<Operand> Children {get; set;}
}
class VariableName : Operand {
string Name {get; set;}
}
Каждый TreeNode помечен соответствующим операндом.Когда элемент в TreeView выбран, помеченный элемент отображается на панели, чтобы вы могли изменить его свойства.Например, когда я выбираю элемент, вы получаете флажок, в котором вы можете установить значение IsNegated.Я успешно связал этот элемент управления с объектом «Операнд», используя:
negateCheckBox.DataBindings.Add("Checked", requirementTree.SelectedNode.Tag, "IsNegated");
Нажатие на флажок соответствующим образом обновляет базовые данные, но это не заставляет TreeView обновлять свои данные, поэтому даже если возвращаемое значениеметод ToString () элемента изменился (теперь к нему добавлен префикс «NEGATIVE»), поскольку TreeNode уже создан с этой строкой, он не обновляется.
У меня также есть некоторые «Add» и «Remove»»кнопки, которые создают дополнительные узлы в TreeView и удаляют их, но все они работают вручную - обновляют базовые структуры данных, а затем перестраивают весь TreeView (это приводит к обновлению представления, поэтому я могу проверить, работают ли другие мои привязки).
Какие шаги мне нужно предпринять, чтобы TreeView не заполнялся вручную, а был полностью привязан к моей структуре данных, чтобы такие изменения сразу же отражались?Кажется, что существует множество способов связать данные в WinForms, и мне неясно, какие из них применимы в каких ситуациях.
Большое спасибо за помощь!