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



我使用WPF与Helix工具包来动画3D网格。我有数据作为点,我用这些数据创建最终的网格。我从螺旋例子的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秒,清除模型并使用其他对象重新绘制当前模型。事件处理程序工作得很好。

是我需要清除和重新绘制模型每当一个按钮被按下。但是在主窗口中。为了调用MainViewModel内部的函数,我必须创建一个类对象。但是如果我这样做,我认为另一个模型实例将被创建,由于MainViewModel的构造函数和模型永远不会被清除或改变。

它永远不会清除,因为事件处理程序总是返回null并且什么都不做。只有当我在MainViewModel构造函数中运行Clear方法时,它才有效,但这不是我想要的。

任何建议我该怎么办?提前感谢

如果您需要调用一个方法在viewmodel,试题:

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

使用MainWindow的当前数据上下文,所以你不需要创建任何新的MainViewModel对象。

最新更新