使用按钮清除 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 对象。
我正在使用 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 对象。