lauffähige Grundversion erstellt
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
using SewerStammGen.Enum;
|
||||
using SewerStammGen.Interface;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SewerStammGen.ViewModel.Factories
|
||||
{
|
||||
public class MainWindowViewModelFactory : IViewModelAbstractFactory
|
||||
{
|
||||
private CreateViewModel<HomeViewModel> _createHomeViewModel;
|
||||
|
||||
public MainWindowViewModelFactory(
|
||||
CreateViewModel<HomeViewModel> createHomeViewModel
|
||||
)
|
||||
{
|
||||
_createHomeViewModel = createHomeViewModel;
|
||||
}
|
||||
|
||||
public BaseViewModel CreateViewModel(EMainWindowViewType viewType)
|
||||
{
|
||||
switch(viewType)
|
||||
{
|
||||
case EMainWindowViewType.Home:
|
||||
return _createHomeViewModel();
|
||||
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
12
SewerStammGen/ViewModel/HomeViewModel.cs
Normal file
12
SewerStammGen/ViewModel/HomeViewModel.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SewerStammGen.ViewModel
|
||||
{
|
||||
public class HomeViewModel : BaseViewModel
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SewerStammGen.ViewModel
|
||||
{
|
||||
public interface IViewModel : INotifyPropertyChanged
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public interface IViewModel<TModel> : IViewModel
|
||||
{
|
||||
[Browsable(false)]
|
||||
[Bindable(false)]
|
||||
TModel Model { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,34 @@
|
||||
using SewerStammGen.Interface.Navigator;
|
||||
using SewerStammGen.Commands;
|
||||
using SewerStammGen.Enum;
|
||||
using SewerStammGen.Interface;
|
||||
using SewerStammGen.Interface.Navigator;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace SewerStammGen.ViewModel
|
||||
{
|
||||
internal class MainWindowViewModel : BaseViewModel
|
||||
public class MainWindowViewModel : BaseViewModel
|
||||
{
|
||||
public IMainWindowNavigator Navigator { get; set; }
|
||||
public BaseViewModel CurrentView => Navigator.CurrentViewModel;
|
||||
public BaseViewModel CurrentViewModel => Navigator.CurrentViewModel;
|
||||
|
||||
public MainWindowViewModel(IMainWindowNavigator navigator)
|
||||
public ICommand UpdateCurrentViewModelCommand { get; }
|
||||
|
||||
public MainWindowViewModel(
|
||||
IMainWindowNavigator navigator,
|
||||
IViewModelAbstractFactory viewModelFactory
|
||||
|
||||
)
|
||||
{
|
||||
Navigator = navigator;
|
||||
|
||||
UpdateCurrentViewModelCommand = new UpdateCurrentViewModelCommand(navigator, viewModelFactory);
|
||||
UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Home);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
13
SewerStammGen/ViewModel/ProjectListViewModel.cs
Normal file
13
SewerStammGen/ViewModel/ProjectListViewModel.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SewerStammGen.ViewModel
|
||||
{
|
||||
public class ProjectListViewModel : BaseViewModel
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace SewerStammGen.ViewModel
|
||||
{
|
||||
class SewerConnectorViewModel : ViewModel
|
||||
class SewerConnectorViewModel : BaseViewModel
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,179 +0,0 @@
|
||||
using Syncfusion.UI.Xaml.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SewerStammGen.ViewModel
|
||||
{
|
||||
[Serializable]
|
||||
public abstract class ViewModel : IViewModel
|
||||
{
|
||||
protected ViewModel()
|
||||
{
|
||||
var initializationTask = new Task(() => Initialize());
|
||||
initializationTask.ContinueWith(result => InitializationCompletedCallback(result));
|
||||
initializationTask.Start();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initializes this instance.
|
||||
/// </summary>
|
||||
protected virtual void Initialize()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Callback method for the async initialization.
|
||||
/// </summary>
|
||||
/// <param name="result">The result.</param>
|
||||
private void InitializationCompletedCallback(IAsyncResult result)
|
||||
{
|
||||
var initializationCompleted = InitializationCompleted;
|
||||
if (initializationCompleted != null)
|
||||
{
|
||||
InitializationCompleted(this, new AsyncCompletedEventArgs(null, !result.IsCompleted, result.AsyncState));
|
||||
}
|
||||
InitializationCompleted = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when the initialization is completed.
|
||||
/// </summary>
|
||||
public event AsyncCompletedEventHandler InitializationCompleted;
|
||||
|
||||
/// <summary>
|
||||
/// Called when a property has changed.
|
||||
/// </summary>
|
||||
/// <param name="propertyName">Name of the property.</param>
|
||||
/// <remarks></remarks>
|
||||
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = "")
|
||||
{
|
||||
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
|
||||
#region INotifyPropertyChanged Members
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a property value changes.
|
||||
/// </summary>
|
||||
/// <remarks></remarks>
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public abstract class ViewModel<TModel> : ViewModel, IViewModel<TModel> where TModel : class
|
||||
{
|
||||
private TModel model;
|
||||
|
||||
/// <summary>
|
||||
/// The Model encapsulated by this ViewModel.
|
||||
/// </summary>
|
||||
/// <remarks>If you change this, all needed PropertyChanged events will be raised automatically.</remarks>
|
||||
[Browsable(false)]
|
||||
[Bindable(false)]
|
||||
public TModel Model
|
||||
{
|
||||
get
|
||||
{
|
||||
return model;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (Model != value)
|
||||
{
|
||||
// get all properties
|
||||
var properties = this.GetType().GetProperties(BindingFlags.Public);
|
||||
// all values before the model has changed
|
||||
var oldValues = properties.Select(p => p.GetValue(this, null));
|
||||
var enumerator = oldValues.GetEnumerator();
|
||||
|
||||
model = value;
|
||||
|
||||
// call OnPropertyChanged for all changed properties
|
||||
foreach (var property in properties)
|
||||
{
|
||||
enumerator.MoveNext();
|
||||
var oldValue = enumerator.Current;
|
||||
var newValue = property.GetValue(this, null);
|
||||
|
||||
if ((oldValue == null && newValue != null)
|
||||
|| (oldValue != null && newValue == null)
|
||||
|| (!oldValue.Equals(newValue)))
|
||||
{
|
||||
OnPropertyChanged(property.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ViewModel"/> class.
|
||||
/// </summary>
|
||||
/// <remarks></remarks>
|
||||
protected ViewModel(TModel model)
|
||||
: base()
|
||||
{
|
||||
this.Model = model;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a hash code for this instance.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
|
||||
/// </returns>
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Model.GetHashCode();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified <see cref="System.Object"/> is equal to this instance.
|
||||
/// </summary>
|
||||
/// <param name="obj">The <see cref="System.Object"/> to compare with this instance.</param>
|
||||
/// <returns>
|
||||
/// <c>true</c> if the specified <see cref="System.Object"/> is equal to this instance; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
return false;
|
||||
|
||||
var other = obj as IViewModel<TModel>;
|
||||
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
return Equals(other);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified <see cref="IViewModel<TModel>"/> is equal to this instance.
|
||||
/// </summary>
|
||||
/// <param name="other">The <see cref="IViewModel<TModel>"/> to compare with this instance.</param>
|
||||
/// <returns>
|
||||
/// <c>true</c> if the specified <see cref="IViewModel<TModel>"/> is equal to this instance; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
public bool Equals(IViewModel<TModel> other)
|
||||
{
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
if (Model == null)
|
||||
return Model == other.Model;
|
||||
|
||||
return Model.Equals(other.Model);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user