0

我有带有实体的 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; }  
    }
}

我想只绑定到所有对象的其他属性的视口,没有层次结构。视口提供来自 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>

这是工作。

在此处输入图像描述

问题在于将该层次结构绑定到视口,beacase视口允许以下列方式绑定:

<ht:HelixViewport3D ItemsSource="{Binding Objects}" Background="{ht:LinearGradientBrush Gray, White}"/>

其中 Objects 是 DataContext 的一个属性:

public ObservableCollection<Visual3D> Objects { get; set; }
4

0 回答 0