Лучший способ сделать это (только если ваши EntityAttrib и GameNode - это два разных класса, унаследованных от одного базового класса) - это на самом деле определить два шаблона данных, как показано ниже.
<HierarchicalDataTemplate DataType="{x:Type local:GameNode}">
<HierarchicalDataTemplate DataType="{x:Type local:EntityAttrib}">
Это лучше, потому что потом легче вспомнить. Рассмотрим объекты файловой системы. Классы FileInfo и DirectoryInfo фактически являются производными от класса FileSystemInfo, который имеет общее свойство.
У вас должен быть базовый класс "BaseGameNode", в нем должно быть что-то, "GameNode" и "GameEntityAttribNode", оба производные от "BaseGameNode". И у них должно быть только одно свойство Children, которое является наблюдаемой коллекцией типа BaseGameNode, но его экземпляр элемента должен отличаться при необходимости.
Вы можете определить несколько шаблонов при условии, что им есть, что различать, тип будет автоматически выбран для дочерних элементов узла.
Значение, которое вы связали, не будет обновляться, поскольку они не являются свойством зависимости и не уведомляют об изменении. Так как мультисвязывание вообще не обнаружит событие изменения коллекции, пока не изменится ссылка / экземпляр коллекции. Когда вы изменяете элемент в коллекции, ваш фактический экземпляр атрибутов / свойств остается прежним.
Когда вы связываете ItemsSource = collection, это ItemsSource, который будет прослушивать событие CollectionChange и обновлять элементы соответствующим образом.