Many nice features

This commit is contained in:
Holger Boerchers
2018-08-14 21:51:18 +02:00
parent 01a90bd460
commit 2b295c9d93
24 changed files with 493 additions and 198 deletions

View File

@ -0,0 +1,17 @@
using System;
using Prism.Events;
namespace MaterialModernWPF.Service
{
public class AdditionalMoments : CalculationPackage
{
public AdditionalMoments(IEventAggregator eventAggregator) : base(eventAggregator)
{
Name = "Additional moments";
CalculationViewType = typeof(DetailedGeometryView);
}
public override string Name { get; }
public override Type CalculationViewType { get; }
}
}

View File

@ -0,0 +1,37 @@
using System;
using System.Windows.Controls;
using Prism.Events;
namespace MaterialModernWPF.Service
{
public abstract class CalculationPackage
{
private readonly IEventAggregator _eventAggregator;
private bool _isSelected;
public CalculationPackage(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
public abstract string Name { get; }
public bool IsSelected
{
get => _isSelected;
set
{
if (Equals(_isSelected, value)) return;
_isSelected = value;
_eventAggregator.GetEvent<CalculationPackageSelectionChangedEvent>().Publish((this, value));
}
}
public abstract Type CalculationViewType { get; }
}
public class CalculationView : UserControl
{
}
}

View File

@ -0,0 +1,40 @@
using System.Linq;
using DryIoc;
using Prism.Events;
using Prism.Regions;
namespace MaterialModernWPF.Service
{
public class CalculationPackageContainer
{
private readonly IRegionManager _regionManager;
private readonly IResolver _resolver;
public CalculationPackage[] CalculationPackages { get; }
public CalculationPackageContainer(
IEventAggregator eventAggregator, IRegionManager regionManager,
IResolver resolver)
{
_regionManager = regionManager;
_resolver = resolver;
CalculationPackages = resolver.ResolveMany<CalculationPackage>().ToArray();
eventAggregator.GetEvent<CalculationPackageSelectionChangedEvent>().Subscribe(SelectionChanged);
}
private void SelectionChanged((CalculationPackage sender, bool isSelected) payload)
{
var viewKey = payload.sender.CalculationViewType.FullName;
var region = _regionManager.Regions[Constants.PackagesRegion];
if (payload.isSelected)
{
var view = _resolver.Resolve(payload.sender.CalculationViewType);
region.Add(view, viewKey);
}
else
{
var view = region.GetView(viewKey);
region.Remove(view);
}
}
}
}

View File

@ -0,0 +1,9 @@
using Prism.Events;
namespace MaterialModernWPF.Service
{
public class CalculationPackageSelectionChangedEvent : PubSubEvent<(CalculationPackage, bool)>
{
}
}

View File

@ -0,0 +1,17 @@
using System;
using Prism.Events;
namespace MaterialModernWPF.Service
{
public class DetailedGeometryPackage : CalculationPackage
{
public DetailedGeometryPackage(IEventAggregator eventAggregator) : base(eventAggregator)
{
Name = "Detailed Geometry";
CalculationViewType = typeof(DetailedGeometryView);
}
public override string Name { get; }
public override Type CalculationViewType { get; }
}
}

View File

@ -0,0 +1,14 @@
<local:CalculationView
x:Class="MaterialModernWPF.Service.DetailedGeometryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MaterialModernWPF.Service"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<GroupBox Margin="10" Header="Detailed Geometry">
<TextBlock FontSize="100" Text="Hallo Welt" />
</GroupBox>
</local:CalculationView>

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MaterialModernWPF.Service
{
/// <summary>
/// Interaktionslogik für DetailedGeometryView.xaml
/// </summary>
public partial class DetailedGeometryView : CalculationView
{
public DetailedGeometryView()
{
InitializeComponent();
}
}
}