예제 #1
0
        public NumberNodeViewModel(object parentNode, NumberModel model)
            : base(model)
        {
            _parentNode = parentNode;
            Items       = new ObservableCollection <NumberNodeViewModel>();

            var converter = new LambdaValueConverter <IDraggable, NumberModel>(
                d => (d is NumberViewModel) ? (d as NumberViewModel).Model : null,
                nm => new NumberNodeViewModel(this, nm));

            DragHelper = new LambdaDragHelper <NumberModel>(converter,
                                                            () => GetAllSubItems(true).Select(nvm => nvm.Model).ToList(),
                                                            nms => DragDropEffectsEx.Move,
                                                            (nms, eff) =>
            {
                if (parentNode is NumberNodeViewModel)
                {
                    (parentNode as NumberNodeViewModel).Items.Remove(this);
                }
                else if (parentNode is NumberTreeViewModel)
                {
                    (parentNode as NumberTreeViewModel).Items.Remove(this);
                }

                //foreach (var nm in nms)
                //    Items.Remove(new NumberNodeViewModel(this, nm));
            }
                                                            );
            DropHelper = new LambdaDropHelper <NumberModel>(converter,
                                                            (nms, eff) =>
            {
                foreach (var nm in nms)
                {
                    if (Items.Any(ivm => ivm.Model.Equals(nm)))
                    {
                        return(QueryDropEffects.None);
                    }
                }
                return(QueryDropEffects.CreateNew(DragDropEffectsEx.Move));
            },
                                                            (nms, eff) =>
            {
                foreach (var nm in nms)
                {
                    Items.Add(new NumberNodeViewModel(this, nm));
                }
                return(DragDropEffectsEx.Move);
            })
            {
                DisplayName = "Node " + model.Value.ToString()
            };
        }
예제 #2
0
        public NumberListViewModel(string displayName)
        {
            Items = new ObservableCollection <NumberViewModel>();

            //Convert from IDraggable (implemented by ViewModel)
            //to Model (value transferred from dragsource to drop target).
            var converter = new LambdaValueConverter <IDraggable, NumberModel>(
                d => (d is NumberViewModel) ? (d as NumberViewModel).Model : null,
                nm => new NumberViewModel(nm));

            DragHelper = new LambdaDragHelper <NumberModel>(converter,
                                                                                           //GetModels()
                                                            () => Items.Where(nvm => nvm.IsSelected).Select(nvm => nvm.Model).ToList(),
                                                            nms => DragDropEffectsEx.Move, //OnQueryDrag(models)
                                                            (nms, eff) =>
            {
                //OnDropCompleted(models, dropEffect)
                foreach (var nm in nms)
                {
                    Items.Remove(new NumberViewModel(nm));
                }
            }
                                                            );
            DropHelper = new LambdaDropHelper <NumberModel>(converter,
                                                            (nms, eff) =>
            {
                //OnQueryDrop(models, possibleEffects)
                foreach (var nm in nms)
                {
                    if (Items.Any(ivm => ivm.Model.Equals(nm)))
                    {
                        return(QueryDropEffects.None);
                    }
                }
                return(QueryDropEffects.CreateNew(DragDropEffectsEx.Move));
            },
                                                            (nms, eff) =>
            {
                //OnDrop(models, possibleEffects)
                foreach (var nm in nms)
                {
                    Items.Add(new NumberViewModel(nm));
                }
                return(DragDropEffectsEx.Move);
            })
            {
                DisplayName = displayName
            };
        }
예제 #3
0
        public NumberTreeViewModel(string displayName)
        {
            Items = new ObservableCollection <NumberNodeViewModel>();


            var converter = new LambdaValueConverter <IDraggable, NumberModel>(
                d => (d is NumberViewModel) ? (d as NumberViewModel).Model : null,
                nm => new NumberNodeViewModel(this, nm));

            DragHelper = new LambdaDragHelper <NumberModel>(converter,
                                                            () => Items.Where(nvm => nvm.IsSelected).Select(nvm => nvm.Model).ToList(),
                                                            nms => DragDropEffectsEx.Move,
                                                            (nms, eff) =>
            {
                foreach (var nm in nms)
                {
                    Items.Remove(new NumberNodeViewModel(this, nm));
                }
            }
                                                            );
            DropHelper = new LambdaDropHelper <NumberModel>(converter,
                                                            (nms, eff) =>
            {
                foreach (var nm in nms)
                {
                    if (Items.Any(ivm => ivm.Model.Equals(nm)))
                    {
                        return(QueryDropEffects.None);
                    }
                }
                return(QueryDropEffects.CreateNew(DragDropEffectsEx.Move));
            },
                                                            (nms, eff) =>
            {
                foreach (var nm in nms)
                {
                    Items.Add(new NumberNodeViewModel(this, nm));
                }
                return(DragDropEffectsEx.Move);
            })
            {
                DisplayName = displayName
            };
        }