C# 如何使用 Caliburn.Micro 将 WPF GeometryModel3D 绑定到 ViewModel
C# How to bind WPF GeometryModel3D to ViewModel with Caliburn.Micro
我正在尝试将 GeometryModel3D 从我的 XAML 绑定到我的 C# ViewModel 中的 属性 的 属性。我正在使用 Caliburn.Micro 来建立我的 MVVM。下面是我试图在我的视图中绑定的简化片段 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 的几何结构和 material。最后是创建 GeometryModel3D 属性:
的 CubeModel class
public class CubeModel
{
private GeometryModel3D _cube;
public GeometryModel3D Cube
{
get { return _cube; }
set { _cube = value; }
}
}
当我执行这段代码时,立方体似乎没有正确绑定到我视图中的 Geometry3D。我的 CubeVisual 属性 中没有断点。没有生成任何错误来帮助我解决这个问题。关于我做错了什么的任何想法?谢谢
Viewport3D 不支持数据绑定,因此即使使用常规 INPC 也无法使其正常工作,更不用说 Caliburn Micro 了。如果你问我,这非常烦人,因为没有充分的理由说明为什么这应该与 2D 有任何不同,即你应该能够使用 Viewport3D 作为 ItemsControl 面板,然后使用数据模板用基于图形对象的场景填充场景在场景视图模型的集合上(如果不能完全像这样实现,那么它至少应该是类似的)。 las,其中的 none 已合并到 3d 类 中,因此我们只剩下这种半支持的大杂烩,其中各个 3d 对象属性是具有完全绑定支持的适当依赖属性等,但是实际场景管理本身不是。
所以基本上,如果你想要这个,你必须自己做。创建一个具有 "ItemsSource" 依赖项 属性 的用户控件,然后设置集合更改通知,以便当此列表中的项目发生更改时,您可以相应地更新场景。如何将视图模型映射到实际的 3d 场景对象取决于您,一种可能的解决方案是使用视图模型作为您希望它表示的 3d 对象的键(值得注意的是,这实际上是 DataTemplates 在2D 大小写....<DataTemplate DataType="{x:Type viewModelType}>
只是 <DataTemplate x:Key="{x:Type viewModelType}>
).
的语法糖
我正在尝试将 GeometryModel3D 从我的 XAML 绑定到我的 C# ViewModel 中的 属性 的 属性。我正在使用 Caliburn.Micro 来建立我的 MVVM。下面是我试图在我的视图中绑定的简化片段 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 的几何结构和 material。最后是创建 GeometryModel3D 属性:
的 CubeModel classpublic class CubeModel
{
private GeometryModel3D _cube;
public GeometryModel3D Cube
{
get { return _cube; }
set { _cube = value; }
}
}
当我执行这段代码时,立方体似乎没有正确绑定到我视图中的 Geometry3D。我的 CubeVisual 属性 中没有断点。没有生成任何错误来帮助我解决这个问题。关于我做错了什么的任何想法?谢谢
Viewport3D 不支持数据绑定,因此即使使用常规 INPC 也无法使其正常工作,更不用说 Caliburn Micro 了。如果你问我,这非常烦人,因为没有充分的理由说明为什么这应该与 2D 有任何不同,即你应该能够使用 Viewport3D 作为 ItemsControl 面板,然后使用数据模板用基于图形对象的场景填充场景在场景视图模型的集合上(如果不能完全像这样实现,那么它至少应该是类似的)。 las,其中的 none 已合并到 3d 类 中,因此我们只剩下这种半支持的大杂烩,其中各个 3d 对象属性是具有完全绑定支持的适当依赖属性等,但是实际场景管理本身不是。
所以基本上,如果你想要这个,你必须自己做。创建一个具有 "ItemsSource" 依赖项 属性 的用户控件,然后设置集合更改通知,以便当此列表中的项目发生更改时,您可以相应地更新场景。如何将视图模型映射到实际的 3d 场景对象取决于您,一种可能的解决方案是使用视图模型作为您希望它表示的 3d 对象的键(值得注意的是,这实际上是 DataTemplates 在2D 大小写....<DataTemplate DataType="{x:Type viewModelType}>
只是 <DataTemplate x:Key="{x:Type viewModelType}>
).