C# 从ObservableCollection中删除三维元素

C# 从ObservableCollection中删除三维元素,c#,wpf,mvvm,3d,mvvm-light,C#,Wpf,Mvvm,3d,Mvvm Light,在我的WPF 4.0项目中,我有一个ObservableCollection,其中包含一些从视图中选择的Visual3D: public ObservableCollection<Visual3D> SelectedElements { get { return _selectedElements; } set { if (Equals(_selectedEleme

在我的WPF 4.0项目中,我有一个ObservableCollection,其中包含一些从视图中选择的Visual3D:

public ObservableCollection<Visual3D> SelectedElements
        {
            get { return _selectedElements; }
            set
            {
                if (Equals(_selectedElements, value))
                {
                    return;
                }

                _selectedElements = value;
                RaisePropertyChanged(() => SelectedElements);
            }
        }

你试过什么了吗?是的:我实现了一个methode private void UnloadProduct(){if(CanUnload){foreach(Visual3D selectedElement in SelectedElements)var elem=(TruncatedCodeVisual3D)selectedElement;int id=elem.VisualId;但是它不起作用:(好的,你应该编辑你的帖子来尝试一下。有什么答案吗!!?plzzz
public HitTestResultBehavior HitTestDown(HitTestResult result)
        {
            var resultMesh = result as RayMeshGeometry3DHitTestResult;

            if (resultMesh == null)
                return HitTestResultBehavior.Continue;

            // Obtain clicked ModelVisual3D.
            var vis = resultMesh.VisualHit as ModelVisual3D;


            if (vis != null)
            {
                Type visType = vis.GetType();
                if (visType.Name == "TruncatedConeVisual3D" || visType.Name == "BoxVisual3D")
                {
                    var geoModel = resultMesh.ModelHit as GeometryModel3D;
                    if (geoModel != null)
                    {
                        var selecteMat = geoModel.Material as DiffuseMaterial;
                        if (selecteMat != null) selecteMat.Brush.Opacity = selecteMat.Brush.Opacity <= 0.7 ? 1 : 0.7;
                    }

                    // Otherwise it's a chair. Get the Transform3DGroup.
                    var xformgrp = vis.Transform as Transform3DGroup;

                    // This should not happen, but play it safe anyway.
                    if (xformgrp == null)
                    {
                        return HitTestResultBehavior.Stop;
                    }


                    // Loop through the child tranforms.
                    foreach (Transform3D t in xformgrp.Children)
                    {
                        // Find the TranslateTransform3D.
                        var trans =
                            t as TranslateTransform3D;

                        if (trans != null)
                        {
                            // Define an animation for the transform.
                            var anima = new DoubleAnimation();
                            if (trans.OffsetY == 0)
                            {
                                DependencyProperty prop = TranslateTransform3D.OffsetZProperty;

                                if (Math.Abs(trans.OffsetZ) < 2)
                                {
                                    anima.To = 20.5*Math.Sign(trans.OffsetZ);
                                    Debug.Assert(SelectedElements != null, "SelectedElements != null");
                                }

                                else
                                {
                                    anima.To = 1*Math.Sign(trans.OffsetZ);
                                    SelectedElements.Add(vis);

                                }

                                // Start the animation and stop the hit-testing.
                                trans.BeginAnimation(prop, anima);
                                return HitTestResultBehavior.Stop;
                            }
                        }
                    }
                }
            }

            return (HitTestResultBehavior) HitTestFilterBehavior.Continue;
        }
private void UnloadProduct()
    {
        if (CanUnload)
        {
            foreach (Visual3D selectedElement in SelectedElements)
            {
                if (selectedElement.DependencyObjectType.Name == "TruncatedConeVisual3D")
                {
                    var test = (TruncatedConeVisual3D) selectedElement;
                    int id = test.VisualId;
                    ElementsCollection.RemoveAt(id);
                    RaisePropertyChanged(() => ElementsCollection);
                }
                else
                {
                    var test = (BoxVisual3D) selectedElement;
                    int id = test.VisualId;
                    ProductsCollection.RemoveAt(id);
                }
            }
        }
    }