Multiple fixes for Views and ViewModels.

This commit is contained in:
Daniel Kraus
2015-08-13 17:59:23 +02:00
parent 3a615eda8b
commit 63447def9b
7 changed files with 79 additions and 25 deletions

View File

@ -342,13 +342,24 @@ namespace zaaReloaded2.ViewModels
{
// Create a new element picker; it will automatically create and
// send us a new element view model if one is chosen by the view.
ElementPickerViewModel picker = new ElementPickerViewModel(true);
ElementPickerViewModel picker = new ElementPickerViewModel(
allowControlElements: IsTopLevelElement());
picker.ElementChosenMessage.Sent += (sender, args) =>
{
ElementViewModel newVM = args.Content.ViewModel as ElementViewModel;
AddElementViewModel(newVM);
if (IsTopLevelElement())
{
AddElementViewModel(newVM);
}
else
{
// If the selected element is on the second level, it
// must be a FormatElementViewModel.
ControlElementViewModel parent = ((FormatElementViewModel)LastSelectedElement).Parent;
AddChildElementViewModel(parent, newVM as FormatElementViewModel);
}
newVM.IsSelected = true;
DoEditElement();
if (newVM is FormatElementViewModel) DoEditElement();
};
AddElementMessage.Send(new ViewModelMessageContent(picker));
}
@ -389,11 +400,16 @@ namespace zaaReloaded2.ViewModels
{
// Replace the previously selected element with the new
// one that we get from the ElementPickerViewModel.
int index = Elements.IndexOf(LastSelectedElement);
ElementViewModel newVM = args.Content.ViewModel as ElementViewModel;
Elements.Insert(
Elements.IndexOf(LastSelectedElement),
newVM);
Elements.Remove(LastSelectedElement);
ControlElementBase oldModel = LastSelectedElement.RevealModelObject() as ControlElementBase;
ControlElementBase newModel = newVM.RevealModelObject() as ControlElementBase;
// Caveat: once we modify the Elements collection, LastSelectedElement will change!
Elements.RemoveAt(index);
Elements.Insert(index, newVM);
newModel.Children = oldModel.Children;
_settings.Elements.RemoveAt(index);
_settings.Elements.Insert(index, newModel);
newVM.PropertyChanged += ElementViewModel_PropertyChanged;
newVM.IsSelected = true;
};
@ -452,12 +468,16 @@ namespace zaaReloaded2.ViewModels
{
if (IsTopLevelElement())
{
AddElementViewModel(LastSelectedElement.Clone() as ElementViewModel);
ElementViewModel newControlVM = LastSelectedElement.Clone() as ElementViewModel;
AddElementViewModel(newControlVM);
newControlVM.IsSelected = true;
}
else
{
FormatElementViewModel formatVM = LastSelectedElement as FormatElementViewModel;
formatVM.Parent.AddChildElement(formatVM.Clone() as FormatElementViewModel);
FormatElementViewModel originalVM = LastSelectedElement as FormatElementViewModel;
FormatElementViewModel newFormatVM = originalVM.Clone() as FormatElementViewModel;
originalVM.Parent.AddChildElement(newFormatVM);
newFormatVM.IsSelected = true;
}
}
}
@ -492,7 +512,7 @@ namespace zaaReloaded2.ViewModels
_settings.Elements.RemoveAt(index);
_settings.Elements.Insert(
index - 1,
LastSelectedElement.RevealModelObject() as ElementBase);
lastSelectedElement.RevealModelObject() as ElementBase);
}
else
{
@ -588,7 +608,7 @@ namespace zaaReloaded2.ViewModels
_settings.Elements.RemoveAt(index);
_settings.Elements.Insert(
index + 1,
LastSelectedElement.RevealModelObject() as ElementBase);
lastSelectedElement.RevealModelObject() as ElementBase);
}
else
{