Привязка двух моделей представления с различной иерархией к одной модели
У меня есть viewport3d с сущностями и древовидная структура с иерархической структурой этих сущностей. Treeview связан с иерархией классов, примерно так:
public class SomeDataObject
{
private ObservableCollection<SomeDataObject> _children;
private string _OtherProperty;
public SomeDataObject()
{
this._children = new ObservableCollection<SomeDataObject>();
//other initialization
}
public ObservableCollection<SomeDataObject> Children
{
get
{
return this._children;
}
set{ _children = value; }
}
public string OtherProperty
{
get
{
return this._OtherProperty;
}
set{ _OtherProperty = value; }
}
}
Я хотел бы привязать к области просмотра только OtherProperty всех объектов, без иерархии. Viewport обеспечивает привязку от ObservableCollection, но не включает предков. Поэтому не имеют доступа к OtherProperty на более низких уровнях.
Я думаю о двух отдельных моделях представления, но я не знаю, как проектировать связь между различными моделями представления.
Я нашел это решение: http://blog.quantumbitdesigns.com/2008/07/22/programmatically-selecting-an-item-in-a-treeview/ но, конечно, это окольный путь. Я хотел бы автоматически обновлять изменения в моделях и модели.
Каково лучшее решение в таких случаях?
РЕДАКТИРОВАТЬ: Это XAML для дерева:
<TreeView Grid.Column="0" Name="MainTreeView">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type WpfTreeViewTricks:SomeDataObject}" ItemsSource="{Binding Path=Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="TreeViewItem:"/>
<TextBlock Margin="1,0,0,0" Text="{Binding Path=OtherProperty}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
и это работа.
Проблема заключается в том, что иерархическая структура bind связана с областью просмотра, поскольку область просмотра beacase допускает привязку следующим образом:
<ht:HelixViewport3D ItemsSource="{Binding Objects}" Background="{ht:LinearGradientBrush Gray, White}"/>
где Objects является свойством DataContext:
public ObservableCollection<Visual3D> Objects { get; set; }