Implement passing test for ElementPickerViewModel.
This commit is contained in:
		@@ -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
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user