Привязка двух моделей представления с различной иерархией к одной модели

У меня есть 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; }

0 ответов

Другие вопросы по тегам