使用按钮清除 WPF-Helix 工具包 3D 视图

Clear WPF-Helix toolkit 3D View using buttons

我正在使用 WPF 和 Helix Toolkit 为 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 内部的函数,我必须创建一个 class 对象。但是,如果我这样做,我认为由于 MainViewModel 的构造函数,将创建另一个 Model 实例,并且 Model 永远不会被清除或更改。

它永远不会清除,因为事件处理程序 returns 始终为 null,并且什么也没做。 仅当我 运行 MainViewModel 构造函数中的 Clear 方法时它才有效,但这不是我想要的。

对我应该做什么有什么建议吗? 提前致谢

如果您需要在视图模型上调用方法,请尝试:

if(this.DataContext is MainViewModel mvm){
    mvm.MyFunctionToCall();
}

这使用 MainWindow 的当前数据上下文,因此您不需要创建任何新的 MainViewModel 对象。