void ManageAssignedMaterials()
        {
            var assignedMaterialAlreadyExists = AssignedMaterials.Contains(SelectedMaterialFromCache);

            if (!assignedMaterialAlreadyExists)
            {
                AssignedMaterials.Add(SelectedMaterialFromCache);
                Materials.Remove(SelectedMaterialFromCache);
            }

            AssignedMaterials = new ObservableCollection <Material>(AssignedMaterials.OrderByDescending(m => m.MarkupPrice));
            Materials         = new ObservableCollection <Material>(Materials.OrderBy(m => m.Name));
        }
        void OnRemove(object obj)
        {
            AssignedMaterials.Remove(SelectedAssignedMaterial);
            AssignedMaterials = new ObservableCollection <Material>(AssignedMaterials.OrderByDescending(m => m.MarkupPrice));

            Materials.Add(SelectedAssignedMaterial);
            Materials = new ObservableCollection <Material>(Materials.OrderBy(m => m.Name));

            SelectedMaterialFromCache = SelectedAssignedMaterial;

            var materialToRemove = Service.Materials.SingleOrDefault(m => SelectedAssignedMaterial == m);

            Service.Materials.Remove(materialToRemove);

            SelectedAssignedMaterial = AssignedMaterials.FirstOrDefault();

            IsDirty = true;

            UpdateState();
        }