Wire up the views.
This commit is contained in:
@ -47,7 +47,7 @@ namespace zaaReloaded2.ViewModels
|
||||
Elements = new ObservableCollection<ElementViewModel>();
|
||||
if (controlElement != null)
|
||||
{
|
||||
foreach (FormatElementBase childElement in controlElement.FormatElements)
|
||||
foreach (FormatElementBase childElement in controlElement.Children)
|
||||
{
|
||||
FormatElementViewModel childVM = new FormatElementViewModel(childElement);
|
||||
Elements.Add(childVM);
|
||||
@ -55,6 +55,22 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance by copying the Elements property from another
|
||||
/// ControlElementViewModel and the Children property from the other
|
||||
/// view model's model.
|
||||
/// </summary>
|
||||
/// <param name="copyFrom">Other ControlElementViewModel to copy
|
||||
/// from.</param>
|
||||
public ControlElementViewModel(
|
||||
ControlElementBase controlElement,
|
||||
ControlElementViewModel copyFrom)
|
||||
: this(controlElement)
|
||||
{
|
||||
Elements = copyFrom.Elements;
|
||||
((ControlElementBase)Element).Children = controlElement.Children;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
@ -64,7 +80,7 @@ namespace zaaReloaded2.ViewModels
|
||||
Elements.Add(viewModel);
|
||||
viewModel.Parent = this;
|
||||
ControlElementBase e = Element as ControlElementBase;
|
||||
e.FormatElements.Add(viewModel.RevealModelObject() as FormatElementBase);
|
||||
e.Children.Add(viewModel.RevealModelObject() as FormatElementBase);
|
||||
}
|
||||
|
||||
public void RemoveChildElement(FormatElementViewModel viewModel)
|
||||
@ -75,13 +91,15 @@ namespace zaaReloaded2.ViewModels
|
||||
"Cannot remove child view model that is not in the collection.");
|
||||
}
|
||||
Elements.Remove(viewModel);
|
||||
((ControlElementBase)Element).FormatElements
|
||||
((ControlElementBase)Element).Children
|
||||
.Remove(viewModel.RevealModelObject() as FormatElementBase);
|
||||
viewModel.Parent = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
public override object Clone()
|
||||
{
|
||||
ControlElementViewModel clone = new ControlElementViewModel();
|
||||
@ -94,5 +112,7 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
return clone;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,9 @@ namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model that presents a list of zaaReloaded2.Contorller.Elements.ElementBase
|
||||
/// classes to choose from.
|
||||
/// classes to choose from. Depending on which constructor is used, this view model
|
||||
/// presents either a list of ControlElementBase-derived classes, a list of
|
||||
/// FormatElementBase-derived classes, or both.
|
||||
/// </summary>
|
||||
class ElementPickerViewModel : ViewModelBase
|
||||
{
|
||||
@ -98,7 +100,7 @@ namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
AddCategory(
|
||||
new CategoryViewModel(
|
||||
"Kontroll-Elemente",
|
||||
Properties.Settings.Default.ControlElementLabel,
|
||||
new Collection<ViewModelBase>()
|
||||
{
|
||||
CreateControlElementViewModel(new SelectFirstDay()),
|
||||
@ -108,13 +110,27 @@ namespace zaaReloaded2.ViewModels
|
||||
)
|
||||
);
|
||||
}
|
||||
CreateFormatElementViewModels();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new element picker for control elements only;
|
||||
/// the selected ControlElementVieModel will copy the Elements
|
||||
/// property from a source view model.
|
||||
/// </summary>
|
||||
/// <param name="copyFromViewModel">ControlElementViewModel
|
||||
/// whose Elements property to copy.</param>
|
||||
public ElementPickerViewModel(ControlElementViewModel copyFromViewModel)
|
||||
{
|
||||
Categories = new List<CategoryViewModel>();
|
||||
AddCategory(
|
||||
new CategoryViewModel(
|
||||
"Ausgabe-Elemente",
|
||||
Properties.Settings.Default.ControlElementLabel,
|
||||
new Collection<ViewModelBase>()
|
||||
{
|
||||
CreateFormatElementViewModel("Laborparameter", new Items()),
|
||||
CreateFormatElementViewModel("Beliebiger Text", new CustomText()),
|
||||
CreateControlElementViewModel(new SelectFirstDay(), copyFromViewModel),
|
||||
CreateControlElementViewModel(new SelectLastDay(), copyFromViewModel),
|
||||
CreateControlElementViewModel(new SelectEachDay(), copyFromViewModel)
|
||||
}
|
||||
)
|
||||
);
|
||||
@ -124,6 +140,20 @@ namespace zaaReloaded2.ViewModels
|
||||
|
||||
#region Private methods
|
||||
|
||||
void CreateFormatElementViewModels()
|
||||
{
|
||||
AddCategory(
|
||||
new CategoryViewModel(
|
||||
Properties.Settings.Default.FormatElementLabel,
|
||||
new Collection<ViewModelBase>()
|
||||
{
|
||||
CreateFormatElementViewModel("Laborparameter", new Items()),
|
||||
CreateFormatElementViewModel("Beliebiger Text", new CustomText()),
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
void AddCategory(CategoryViewModel category)
|
||||
{
|
||||
category.PropertyChanged += ElementViewModel_PropertyChanged;
|
||||
@ -143,6 +173,15 @@ namespace zaaReloaded2.ViewModels
|
||||
return vm;
|
||||
}
|
||||
|
||||
ViewModelBase CreateControlElementViewModel(
|
||||
ControlElementBase element, ControlElementViewModel copyFromViewModel)
|
||||
{
|
||||
ControlElementViewModel vm = new ControlElementViewModel(element, copyFromViewModel);
|
||||
vm.DisplayString = element.Label;
|
||||
vm.PropertyChanged += ElementViewModel_PropertyChanged;
|
||||
return vm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new FormatElementViewModel that wraps a FormatElementBase
|
||||
/// object and has a custom display string. The custom display string
|
||||
@ -176,6 +215,7 @@ namespace zaaReloaded2.ViewModels
|
||||
if (CanChooseElement())
|
||||
{
|
||||
ElementChosenMessage.Send(new ViewModelMessageContent(Selected));
|
||||
DoCloseView();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,14 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public override string DisplayString
|
||||
{
|
||||
get
|
||||
{
|
||||
return Label;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
@ -20,6 +20,7 @@ using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Bovender.Mvvm;
|
||||
using zaaReloaded2.Controller.Elements;
|
||||
|
||||
namespace zaaReloaded2.ViewModels
|
||||
@ -31,10 +32,10 @@ namespace zaaReloaded2.ViewModels
|
||||
public string Content
|
||||
{
|
||||
[DebuggerStepThrough]
|
||||
get { return ((FormatElementBase)Element).Content; }
|
||||
get { return _content; }
|
||||
set
|
||||
{
|
||||
((FormatElementBase)Element).Content = value;
|
||||
_content = value;
|
||||
OnPropertyChanged("Content");
|
||||
}
|
||||
}
|
||||
@ -47,6 +48,24 @@ namespace zaaReloaded2.ViewModels
|
||||
|
||||
#endregion
|
||||
|
||||
#region Commands
|
||||
|
||||
public DelegatingCommand SaveCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_saveCommand == null)
|
||||
{
|
||||
_saveCommand = new DelegatingCommand(
|
||||
param => DoSave(),
|
||||
param => CanSave());
|
||||
}
|
||||
return _saveCommand;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public FormatElementViewModel() : base() { }
|
||||
@ -55,10 +74,13 @@ namespace zaaReloaded2.ViewModels
|
||||
: this()
|
||||
{
|
||||
Element = formatElement;
|
||||
Content = ((FormatElementBase)Element).Content;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
public override object Clone()
|
||||
{
|
||||
FormatElementViewModel clone = new FormatElementViewModel();
|
||||
@ -66,5 +88,52 @@ namespace zaaReloaded2.ViewModels
|
||||
clone.Element = Element;
|
||||
return clone;
|
||||
}
|
||||
|
||||
public override string DisplayString
|
||||
{
|
||||
get
|
||||
{
|
||||
if (String.IsNullOrEmpty(Content))
|
||||
{
|
||||
return _displayString;
|
||||
}
|
||||
else
|
||||
{
|
||||
return base.DisplayString;
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
_displayString = value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
void DoSave()
|
||||
{
|
||||
((FormatElementBase)Element).Content = _content;
|
||||
// Writing the _content field to the model affects our
|
||||
// DisplayString property; this is a hack to make it known.
|
||||
OnPropertyChanged("DisplayString");
|
||||
CloseViewCommand.Execute(null);
|
||||
}
|
||||
|
||||
bool CanSave()
|
||||
{
|
||||
return !String.IsNullOrEmpty(Content);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
DelegatingCommand _saveCommand;
|
||||
string _displayString;
|
||||
string _content;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -238,8 +238,9 @@ namespace zaaReloaded2.ViewModels
|
||||
Settings s = new Settings("Neu");
|
||||
SettingsViewModel vm = new SettingsViewModel(s);
|
||||
_repository.SettingsList.Add(s);
|
||||
SettingsList.Add(vm);
|
||||
AddSettingsViewModel(vm);
|
||||
vm.IsSelected = true;
|
||||
EditSettingsMessage.Send(new ViewModelMessageContent(vm));
|
||||
}
|
||||
|
||||
bool CanDeleteSettings()
|
||||
@ -291,6 +292,7 @@ namespace zaaReloaded2.ViewModels
|
||||
AddSettingsViewModel(copy);
|
||||
LastSelected.IsSelected = false;
|
||||
copy.IsSelected = true;
|
||||
EditSettingsMessage.Send(new ViewModelMessageContent(copy));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,7 @@ using Bovender.Mvvm.Messaging;
|
||||
using zaaReloaded2.Controller;
|
||||
using zaaReloaded2.Controller.Elements;
|
||||
using zaaReloaded2.Formatter;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
@ -104,7 +105,12 @@ namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
if (_referenceStyle == null)
|
||||
{
|
||||
_referenceStyle = new EnumProvider<ReferenceStyle>(_settings.ReferenceStyle);
|
||||
_referenceStyle = new EnumProvider<ReferenceStyle>();
|
||||
_referenceStyle.AsEnum = _settings.ReferenceStyle;
|
||||
_referenceStyle.PropertyChanged += (sender, args) =>
|
||||
{
|
||||
_settings.ReferenceStyle = _referenceStyle.AsEnum;
|
||||
};
|
||||
}
|
||||
return _referenceStyle;
|
||||
}
|
||||
@ -122,7 +128,7 @@ namespace zaaReloaded2.ViewModels
|
||||
: base()
|
||||
{
|
||||
_settings = settings;
|
||||
Elements = new List<ElementViewModel>();
|
||||
Elements = new ObservableCollection<ElementViewModel>();
|
||||
foreach (ElementBase element in settings.Elements)
|
||||
{
|
||||
ElementViewModel vm;
|
||||
@ -177,6 +183,30 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public Message<ViewModelMessageContent> EditElementMessage
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_editElementMessage == null)
|
||||
{
|
||||
_editElementMessage = new Message<ViewModelMessageContent>();
|
||||
}
|
||||
return _editElementMessage;
|
||||
}
|
||||
}
|
||||
|
||||
public Message<ViewModelMessageContent> ChangeControlElementMessage
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_changeControlElementMessage == null)
|
||||
{
|
||||
_changeControlElementMessage = new Message<ViewModelMessageContent>();
|
||||
}
|
||||
return _changeControlElementMessage;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Commands
|
||||
@ -208,6 +238,20 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public DelegatingCommand EditElementCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_editElementCommand == null)
|
||||
{
|
||||
_editElementCommand = new DelegatingCommand(
|
||||
param => DoEditElement(),
|
||||
param => CanEditElement());
|
||||
}
|
||||
return _editElementCommand;
|
||||
}
|
||||
}
|
||||
|
||||
public DelegatingCommand DeleteElementCommand
|
||||
{
|
||||
get
|
||||
@ -275,6 +319,8 @@ namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
ElementViewModel newVM = args.Content.ViewModel as ElementViewModel;
|
||||
AddElementViewModel(newVM);
|
||||
newVM.IsSelected = true;
|
||||
DoEditElement();
|
||||
};
|
||||
AddElementMessage.Send(new ViewModelMessageContent(picker));
|
||||
}
|
||||
@ -290,6 +336,8 @@ namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
FormatElementViewModel newVM = args.Content.ViewModel as FormatElementViewModel;
|
||||
AddChildElementViewModel(LastSelectedElement as ControlElementViewModel, newVM);
|
||||
newVM.IsSelected = true;
|
||||
DoEditElement();
|
||||
};
|
||||
AddChildElementMessage.Send(new ViewModelMessageContent(picker));
|
||||
}
|
||||
@ -300,6 +348,41 @@ namespace zaaReloaded2.ViewModels
|
||||
return LastSelectedElement is ControlElementViewModel;
|
||||
}
|
||||
|
||||
void DoEditElement()
|
||||
{
|
||||
if (CanEditElement())
|
||||
{
|
||||
if (LastSelectedElement is ControlElementViewModel)
|
||||
{
|
||||
ElementPickerViewModel picker = new ElementPickerViewModel(
|
||||
LastSelectedElement as ControlElementViewModel);
|
||||
picker.ElementChosenMessage.Sent += (sender, args) =>
|
||||
{
|
||||
// Replace the previously selected element with the new
|
||||
// one that we get from the ElementPickerViewModel.
|
||||
ElementViewModel newVM = args.Content.ViewModel as ElementViewModel;
|
||||
Elements.Insert(
|
||||
Elements.IndexOf(LastSelectedElement),
|
||||
newVM);
|
||||
Elements.Remove(LastSelectedElement);
|
||||
newVM.PropertyChanged += ElementViewModel_PropertyChanged;
|
||||
newVM.IsSelected = true;
|
||||
};
|
||||
ChangeControlElementMessage.Send(
|
||||
new ViewModelMessageContent(picker));
|
||||
}
|
||||
else
|
||||
{
|
||||
EditElementMessage.Send(new ViewModelMessageContent(LastSelectedElement));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CanEditElement()
|
||||
{
|
||||
return LastSelectedElement != null && LastSelectedElement.IsSelected;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deletes the selected element.
|
||||
/// </summary>
|
||||
@ -403,10 +486,13 @@ namespace zaaReloaded2.ViewModels
|
||||
Settings _settings;
|
||||
DelegatingCommand _addElementCommand;
|
||||
DelegatingCommand _addChildElementCommand;
|
||||
DelegatingCommand _editElementCommand;
|
||||
DelegatingCommand _deleteElementCommand;
|
||||
DelegatingCommand _copyElementCommand;
|
||||
Message<ViewModelMessageContent> _addElementMessage;
|
||||
Message<ViewModelMessageContent> _addChildElementMessage;
|
||||
Message<ViewModelMessageContent> _editElementMessage;
|
||||
Message<ViewModelMessageContent> _changeControlElementMessage;
|
||||
ElementViewModel _selectedElement;
|
||||
EnumProvider<ReferenceStyle> _referenceStyle;
|
||||
|
||||
|
Reference in New Issue
Block a user