繁体   English   中英

C# 如何使用 Caliburn.Micro 将 WPF GeometryModel3D 绑定到 ViewModel

[英]C# How to bind WPF GeometryModel3D to ViewModel with Caliburn.Micro

我正在尝试将我的 XAML 中的 GeometryModel3D 绑定到 C# 中我的 ViewModel 中的属性的属性。 我正在使用 Caliburn.Micro 来建立我的 MVVM。 下面是我如何尝试在我的 View XAML 中绑定的简化片段:

<Viewport3D>
    <ModelVisual3D>
        <ModelVisual3D.Content>
            <Model3DGroup>
                <GeometryModel3D x:Name = "CubeVisual_Cube">
            </Model3DGroup>
        </ModelVisual3D.Content>
    </ModelVisual3D>
</Viewport3D>

在我的 C# ViewModel 中:

private CubeModel _cubeVisual = new CubeModel();
public CubeModel CubeVisual
{
    get { return _cubeVisual; }
    set
    {
        _cubeVisual = value;
        NotifyOfPropertyChange(() => CubeVisual);
    }
}

CubeVisual 有一个构造函数,可以完全建立GeomretyModel3D 的几何形状和材质。 最后是创建 GeometryModel3D 属性的 CubeModel 类:

public class CubeModel
{
    private GeometryModel3D _cube;
    public GeometryModel3D Cube
    {
        get { return _cube; }
        set { _cube = value; }
    }
}

当我执行此代码时,立方体似乎没有正确绑定到我的视图中的 Geometry3D。 在我的 CubeVisual 属性中没有遇到断点。 没有生成错误来帮助我解决这个问题。 关于我做错了什么的任何想法? 谢谢。

Viewport3D 不支持数据绑定,因此即使使用常规 INPC,您也无法使用它,更不用说 Caliburn Micro。 如果你问我,这非常烦人,因为没有充分的理由为什么这应该与 2D 不同,即你应该能够使用 Viewport3D 作为 ItemsControl 面板,然后使用数据模板来填充基于图形对象的场景关于场景视图模型的集合(如果它不能像这样完全实现,那么它至少应该是类似的)。 唉,这些都没有被合并到 3d 类中,所以我们只剩下这种半支持的大杂烩,其中单个 3d 对象属性是具有完全绑定支持等的适当依赖属性,但实际的场景管理本身不是.

所以基本上如果你想要这个,你必须自己做。 创建一个具有“ItemsSource”依赖属性的用户控件,然后设置集合更改通知,以便在此列表中的项目更改时相应地更新您的场景。 如何将视图模型映射到实际的 3d 场景对象取决于您,一种可能的解决方案是使用视图模型作为您希望它表示的 3d 对象的键(值得注意的是,这实际上是 DataTemplates 在2D case.... <DataTemplate DataType="{x:Type viewModelType}>只是<DataTemplate x:Key="{x:Type viewModelType}>语法糖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM