Implement passing test for ElementPickerViewModel.

This commit is contained in:
Daniel Kraus
2015-08-03 14:31:35 +02:00
parent 8437f0907c
commit 805da69d47
3 changed files with 135 additions and 7 deletions

View File

@ -38,19 +38,65 @@ namespace zaaReloaded2.ViewModels
/// <summary>
/// A two-dimensional tree
/// </summary>
public IList<CategoryViewModel> AvailableElements { get; private set; }
public IList<CategoryViewModel> Categories { get; private set; }
/// <summary>
/// Gets the currently selected element, or null if no element is selected.
/// </summary>
/// <remarks>
/// TODO: Raise PropertyChanged event.
/// </remarks>
public ElementViewModel Selected { get; private set; }
#endregion
#region Commands
public DelegatingCommand ChooseElementCommand
{
get
{
if (_chooseElementCommand == null)
{
_chooseElementCommand = new DelegatingCommand(
param => DoChooseElement(),
param => CanChooseElement());
}
return _chooseElementCommand;
}
}
#endregion
#region Messages
/// <summary>
/// A message that is sent out when an element has been chosen;
/// the message content is the element's view model with the element
/// wrapped inside.
/// </summary>
public Message<ViewModelMessageContent> ElementChosenMessage
{
get
{
if (_elementChosenMessage == null)
{
_elementChosenMessage = new Message<ViewModelMessageContent>();
}
return _elementChosenMessage;
}
}
#endregion
#region Constructors
public ElementPickerViewModel(SettingsViewModel caller, bool allowControlElements)
public ElementPickerViewModel(bool allowControlElements)
{
_caller = caller;
AvailableElements = new List<CategoryViewModel>();
Categories = new List<CategoryViewModel>();
if (allowControlElements)
{
AvailableElements.Add(
Categories.Add(
new CategoryViewModel(
"Kontroll-Elemente",
new Collection<ViewModelBase>()
@ -62,7 +108,7 @@ namespace zaaReloaded2.ViewModels
)
);
}
AvailableElements.Add(
Categories.Add(
new CategoryViewModel(
"Ausgabe-Elemente",
new Collection<ViewModelBase>()
@ -87,6 +133,7 @@ namespace zaaReloaded2.ViewModels
{
ControlElementViewModel vm = new ControlElementViewModel(element);
vm.DisplayString = element.Label;
vm.PropertyChanged += ElementViewModel_PropertyChanged;
return vm;
}
@ -102,6 +149,31 @@ namespace zaaReloaded2.ViewModels
return vm;
}
void ElementViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsSelected")
{
// Casting sender as ElementViewModel may result in Null, but this
// is a desired effect because category headings may be selected
// in a view, but are not valid ElementViewModels that we could
// 'choose'.
Selected = sender as ElementViewModel;
}
}
void DoChooseElement()
{
if (CanChooseElement())
{
ElementChosenMessage.Send(new ViewModelMessageContent(Selected));
}
}
bool CanChooseElement()
{
return Selected != null;
}
#endregion
#region Implementation ov ViewModelBase
@ -115,7 +187,8 @@ namespace zaaReloaded2.ViewModels
#region Fields
SettingsViewModel _caller;
DelegatingCommand _chooseElementCommand;
Message<ViewModelMessageContent> _elementChosenMessage;
#endregion
}