У меня есть иерархия, которая выглядит так - Завод> машины> компоненты> элементы управления, где можно прочитать ">" как «содержит список».
Это очень хорошо вписывается в TreeView с использованием HierarchicalDataTemplates. Теперь предположим, что я хочу добавить флажки к дереву, чтобы пользователь мог создавать «представления» дерева, требующие управления. В настоящее время мои шаблоны являются данными, привязанными к фактическим объектам машины / компонента / управления, например, так ...
<HierarchicalDataTemplate DataType = "{x:Type src:Component}" ItemsSource = "{Binding Path=Controls}">
<StackPanel Orientation = "Horizontal">
<CheckBox IsChecked = "False" />
<TextBlock Text = "{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
Я не хочу изменять код моих машин / компонентов / классов управления, чтобы иметь возможность обрабатывать создание "представления". Другими словами, я хочу, чтобы код «модели данных» и код пользовательского интерфейса были разделены. Например, чтобы установить флажок, мне нужно привязать его к свойству IsSelected элемента управления. Я обнаружил, что добавляю к этим классам кучу свойств и код уведомлений. Другой альтернативой, которую я пробовал, было создание класса «представления» для каждого класса машины / компонента / элемента управления. При таком подходе мне пришлось создавать копии данных в классах «представления» и синхронизировать их с фактическими данными. Как это сделать?





Мне помогли эти две статьи CodeProject: