【发布时间】:2021-10-12 17:09:50
【问题描述】:
我正在使用带有 Helix Toolkit 的 WPF 来制作 3D 网格动画。我将数据作为点,并使用这些数据创建最终网格。我从 Helix 示例中获取 SimpleDemo 项目,在我的 MainViewModel.cs 文件中我有以下代码:
public class MainViewModel : INotifyPropertyChanged
{
MeshBuilder meshBuilder;
MeshGeometry3D mesh;
Model3DGroup modelGroup;
public MainViewModel()
{
var greenMaterial = MaterialHelper.CreateMaterial(Colors.Green);
modelGroup = new Model3DGroup();
// Create a mesh builder and add a box to it
meshBuilder = new MeshBuilder(false, false);
meshBuilder.AddBox(new Point3D(1, 1, 1), 1, 1, 1);
// Create a mesh from the builder (and freeze it)
mesh = meshBuilder.ToMesh(true);
modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Material = greenMaterial, BackMaterial = greenMaterial });
Model = modelGroup;
ButtonClearAsync();
}
...
rest code
...
在这里我创建了一个立方体,然后将它添加到模型上。 ButtonClearAsync 方法是清除模型的方法。
public async Task RemoveModel()
{
modelGroup = new Model3DGroup();
await Task.Delay(2000);
Model = null;
OnPropertyChanged(nameof(Model));
meshBuilder = new MeshBuilder(false, false);
meshBuilder.AddBox(new Point3D(5, 5, 5), 2, 2, 2);
mesh = meshBuilder.ToMesh(true);
var greenMaterial = MaterialHelper.CreateMaterial(Colors.Green);
modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Material = greenMaterial, BackMaterial = greenMaterial });
Model = modelGroup;
OnPropertyChanged(nameof(Model));
}
等待 2 秒,清除模型并用其他对象重新绘制当前模型。 事件处理程序工作得很好。
问题是我需要在按下按钮时清除并重绘模型。 但是在 MainWindow.xaml 和 MainWindow.xaml.cs 文件中,为了调用 MainViewModel 内部的函数,我必须创建一个类对象。但是如果我这样做,我认为由于 MainViewModel 的构造函数会创建另一个 Model 实例,并且 Model 永远不会清除或更改。
它永远不会清除,因为事件处理程序总是返回 null 并且什么都不做。 只有当我在 MainViewModel 构造函数中运行 Clear 方法时它才有效,但这不是我想要的。
对我应该怎么做有什么建议吗? 提前致谢
【问题讨论】:
标签: c# wpf helix-3d-toolkit