mirror of
https://github.com/DevExpress/netcore-winforms-demos.git
synced 2026-01-06 08:47:14 +00:00
Add Outlook Inspired and Stock Market demos
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using DevExpress.Mvvm.DataModel;
|
||||
using DevExpress.Mvvm;
|
||||
using DevExpress.Mvvm.DataAnnotations;
|
||||
|
||||
namespace DevExpress.DevAV.Common.ViewModel {
|
||||
partial class CollectionViewModel<TEntity, TPrimaryKey, TUnitOfWork> : ISupportParameter, IDocumentContent
|
||||
where TEntity : class
|
||||
where TUnitOfWork : IUnitOfWork {
|
||||
protected override void OnInitializeInRuntime() {
|
||||
base.OnInitializeInRuntime();
|
||||
Messenger.Default.Register<SelectedItemSynchronizationMessage<TEntity>>(this, x => OnSelectedItemSynchronizationMessage(x));
|
||||
Messenger.Default.Register<EntityMessage<TEntity, TPrimaryKey>>(this, x => OnEntityMessage(x));
|
||||
}
|
||||
void OnEntityMessage(EntityMessage<TEntity, TPrimaryKey> m) {
|
||||
if(m.MessageType == EntityMessageType.Changed) {
|
||||
TEntity entity = ((EntitiesChangeTracker<TPrimaryKey>)ChangeTracker).FindLocalProjectionByKey(m.PrimaryKey);
|
||||
if(entity != null)
|
||||
OnEntityChanged(entity);
|
||||
RaiseEntityChanged(m.PrimaryKey);
|
||||
}
|
||||
else RaiseEntitiesCountChanged(Entities.Count);
|
||||
}
|
||||
protected virtual void OnEntityChanged(TEntity entity) { }
|
||||
protected override void OnIsLoadingChanged() {
|
||||
base.OnIsLoadingChanged();
|
||||
if(!IsLoading)
|
||||
RaiseEntitiesCountChanged(Entities.Count);
|
||||
}
|
||||
public event EventHandler<EntitiesCountEventArgs> EntitiesCountChanged;
|
||||
public event EventHandler<EntityEventArgs<TPrimaryKey>> EntityChanged;
|
||||
void RaiseEntityChanged(TPrimaryKey key) {
|
||||
EventHandler<EntityEventArgs<TPrimaryKey>> handler = EntityChanged;
|
||||
if(handler != null)
|
||||
handler(this, new EntityEventArgs<TPrimaryKey>(key));
|
||||
}
|
||||
void RaiseEntitiesCountChanged(int count) {
|
||||
EventHandler<EntitiesCountEventArgs> handler = EntitiesCountChanged;
|
||||
if(handler != null)
|
||||
handler(this, new EntitiesCountEventArgs(count));
|
||||
}
|
||||
[Command, Display(AutoGenerateField = false)]
|
||||
public virtual void OnLoaded() {
|
||||
//SelectedEntity = Parameter == null ? Entities.FirstOrDefault() : FindEntity((TPrimaryKey)Parameter); // TODO
|
||||
}
|
||||
public event EventHandler SelectedEntityChanged; // move to descendand
|
||||
protected override void OnSelectedEntityChanged() {
|
||||
//Parameter = SelectedEntity == null ? (object)null : CreateRepository().GetPrimaryKey(SelectedEntity);
|
||||
base.OnSelectedEntityChanged();
|
||||
Messenger.Default.Send(new SelectedItemSynchronizationMessage<TEntity>(SelectedEntity));
|
||||
if(SelectedEntityChanged != null)
|
||||
SelectedEntityChanged(this, EventArgs.Empty);
|
||||
}
|
||||
void OnSelectedItemSynchronizationMessage(SelectedItemSynchronizationMessage<TEntity> message) {
|
||||
//SelectedEntity = message.Entity == null ? null : FindEntity(GetPrimaryKey(message.Entity)); TODO
|
||||
}
|
||||
public event EventHandler ParameterChanged;
|
||||
protected virtual object GetTitle() {
|
||||
return null;
|
||||
}
|
||||
#region ISupportParameter
|
||||
object parameterCore;
|
||||
protected object Parameter {
|
||||
get { return parameterCore; }
|
||||
private set {
|
||||
parameterCore = value;
|
||||
EventHandler handler = ParameterChanged;
|
||||
if(handler != null)
|
||||
handler(this, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
object ISupportParameter.Parameter {
|
||||
get { return Parameter; }
|
||||
set { Parameter = value; }
|
||||
}
|
||||
#endregion
|
||||
protected IDocumentManagerService DocumentManagerService { get { return GetDocumentManagerService(); } }
|
||||
protected IDocument FindDocument<TViewModel>() {
|
||||
if(DocumentManagerService == null) return null;
|
||||
return DocumentManagerService.Documents.FirstOrDefault(d => d.Content is TViewModel);
|
||||
}
|
||||
protected IDocument FindDocument<TViewModel>(TPrimaryKey key) {
|
||||
if(DocumentManagerService == null) return null;
|
||||
foreach(IDocument document in DocumentManagerService.Documents) {
|
||||
ISingleObjectViewModel<TEntity, TPrimaryKey> entityViewModel = document.Content as ISingleObjectViewModel<TEntity, TPrimaryKey>;
|
||||
if(entityViewModel != null && entityViewModel is TViewModel && object.Equals(entityViewModel.PrimaryKey, key))
|
||||
return document;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public TPrimaryKey SelectedEntityKey {
|
||||
get { return (SelectedEntity != null) ? CreateRepository().GetPrimaryKey(SelectedEntity) : default(TPrimaryKey); }
|
||||
}
|
||||
public virtual IQueryable<TEntity> GetEntities(Expression<Func<TEntity, bool>> filter = null) {
|
||||
try {
|
||||
return getRepositoryFunc(CreateUnitOfWork()).GetFilteredEntities(filter);
|
||||
}
|
||||
catch(Exception e) { throw new NotSupportedException("Error in Expression:" + filter.ToString(), e); }
|
||||
}
|
||||
public Data.Filtering.CriteriaOperator GetInOperator(IEnumerable<TEntity> entities) {
|
||||
string keyName = ((MemberExpression)CreateRepository().GetPrimaryKeyExpression.Body).Member.Name;
|
||||
return new Data.Filtering.InOperator(keyName, entities.Select(e => CreateRepository().GetPrimaryKey(e)));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user