70 lines
1.7 KiB
C#
70 lines
1.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.ComponentModel;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
|
|
namespace TradeBlotter.ViewModels
|
|
{
|
|
public interface IPersistentViewModel
|
|
{
|
|
SaveParameters GetSaveParameters();
|
|
void SetSaveParameters(SaveParameters saveParameters);
|
|
bool CanPersist();
|
|
}
|
|
public abstract class ModelBase : INotifyPropertyChanged
|
|
{
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
protected virtual bool ThrowOnInvalidPropertyName
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
protected virtual void OnPropertyChanged(string propertyName)
|
|
{
|
|
this.VerifyPropertyName(propertyName);
|
|
PropertyChangedEventHandler handler = PropertyChanged;
|
|
if (handler != null)
|
|
{
|
|
var e = new PropertyChangedEventArgs(propertyName);
|
|
handler(this, e);
|
|
}
|
|
}
|
|
public void VerifyPropertyName(string propertyName)
|
|
{
|
|
if (TypeDescriptor.GetProperties(this)[propertyName] == null)
|
|
{
|
|
string message = "Invalid property name: " + propertyName;
|
|
if (this.ThrowOnInvalidPropertyName) throw new Exception(message); else Debug.Fail(message);
|
|
}
|
|
}
|
|
}
|
|
public abstract class ViewModelBase : ModelBase, IDisposable, IPersistentViewModel
|
|
{
|
|
protected ViewModelBase()
|
|
{
|
|
}
|
|
public abstract SaveParameters GetSaveParameters();
|
|
public abstract void SetSaveParameters(SaveParameters saveParameters);
|
|
public abstract bool CanPersist();
|
|
public virtual void Dispose()
|
|
{
|
|
this.OnDispose();
|
|
}
|
|
|
|
public virtual String DisplayName { get; protected set; }
|
|
|
|
protected virtual void OnDispose()
|
|
{
|
|
}
|
|
|
|
#if DEBUG
|
|
~ViewModelBase()
|
|
{
|
|
}
|
|
#endif
|
|
}
|
|
}
|