我正在使用帶有 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 方法時它才有效,但這不是我想要的。
關于我該怎么做的任何建議?提前致謝
uj5u.com熱心網友回復:
如果您需要在視圖模型上呼叫方法,請嘗試:
if(this.DataContext is MainViewModel mvm){
mvm.MyFunctionToCall();
}
這使用 MainWindow 的當前資料背景關系,因此您不需要創建任何新的 MainViewModel 物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315346.html
標籤:C# 小白 helix-3d-工具包
