1、接口IProcedure添加属性:
/// <summary>
///
/// </summary>
string OtherProcedureIds { get; set; }
/// <summary>
/// 其他手术列表
/// </summary>
IList<IProcedure> OtherProcedures { get; }
2、实现类Procedure添加实现:
protected override void SetDto(DtoProcedure dto)
{
base.SetDto(dto);
_otherProcedures = null;
}
public string OtherProcedureIds
{
get { return Dto.OtherProcedureIds; }
set
{
_otherProcedures = null;
Dto.OtherProcedureIds = value;
OnPropertyChanged(a => a.OtherProcedureIds);
OnPropertyChanged(a => a.OtherProcedures);
}
}
private IList<IProcedure> _otherProcedures = null;
public IList<IProcedure> OtherProcedures
{
get
{
if (_otherProcedures == null)
{
_otherProcedures = new List<IProcedure>();
var ids = OtherProcedureIds.Split<int>(",");
foreach (var procedureId in ids)
{
_otherProcedures.AddRange(Repository.GetByKey(procedureId));
}
}
return _otherProcedures;
}
}
static IProcedureRepository Repository
{
get { return UseCaseItem.Current.Items.GetOrCreate<IProcedureRepository>(SearchMode.Up); }
}
3、维护表示器ProcedureDetailViewPresenter.cs增加属性(用于多选或排序的表示器):
private PickableEntitiesSortingPresenter _sortingPresenter;
public PickableEntitiesSortingPresenter PickableEntitiesSortingPresenter
{
get
{
if (_sortingPresenter == null)
{
_sortingPresenter = this.UseCase.Items.GetOrCreate<PickableEntitiesSortingPresenter>(Guid.NewGuid().ToString(), SearchMode.Local);
IRegion region = UseCaseItem.Current.Regions[RegionNames.DialogRegion];
_sortingPresenter.AttachRegion(region);
_sortingPresenter.ViewPart.SetViewResizeMode(JetSun.Presentation.Markups.ViewResizeMode.NoResize);
_sortingPresenter.ViewPart.Width = 640;
_sortingPresenter.ViewPart.Height = 480;
_sortingPresenter.IsSelectorUsage = false;
_sortingPresenter.ViewPart.SetRegionHeader("其他手术排序维护");
}
return _sortingPresenter;
}
}
4、维护视图ProcedureDetailView.xaml.cs增加相关代码:
EntityPicker _pckOtherProcedures;
private void InitPickers(IBindingCollection<IProcedure> bindings)
{
EntityPickerManager pickerManager = EntityPickerManager.GetOrCreate(Presenter.UseCase);
_pckOtherProcedures = new EntityPicker(_txtOtherProcedures, typeof(IProcedure));
_pckOtherProcedures.IsMultiSelected = true;
_pckOtherProcedures.UnselectReturnCurrent = false;
_pckOtherProcedures.AllowDefaultView = false;
_pckOtherProcedures.DataAcceptor = AcceptOtherProcedureIds;
_pckOtherProcedures.DataProvider = ProcedureSelectedProvider;
_pckOtherProcedures.DefaultMulitSelectedItems = GetOtherProcedureItems;
pickerManager.Register(_pckOtherProcedures);
}
private IList ProcedureSelectedProvider()
{
return ProcedureRepository.GetByPredicate(ProcedureRepository.Criterias.IsDeleted.Equal(false)).AsList();
}
private ActionResult AcceptOtherProcedureIds(PickResult result)
{
(_bindings.CurrentEntity as IProcedure).OtherProcedureIds = string.Join(",", result.Items.CastAs<IProcedure>().Where(a => !a.IsDeleted && !a.IsEmpty).Select(a => a.Id));
_txtOtherProcedures.SetText((_bindings.CurrentEntity as IProcedure).OtherProcedures.Select(a => a.Name).ToString(","));
this.RaiseEditedEvent(new EditedEventArgs(_bindings.CurrentEntity, EditState.Update, "OtherProcedureIds"));
return ActionResult.Success;
}
private IList GetOtherProcedureItems()
{
var entity = _bindings.CurrentEntity as IProcedure;
if (entity == null) return null;
return (_bindings.CurrentEntity as IProcedure).OtherProcedures.ToList();
}
private void _btnSort_Click(object sender, RoutedEventArgs e)
{
IProcedure current = _bindings.CurrentEntity as IProcedure;
var list = current.OtherProcedures.CastAs<IPickableObject>().ToList();
var presenter = Presenter.PickableEntitiesSortingPresenter;
presenter.RefreshData(list);
presenter.ShowView();
if (presenter.IsOK)
{
string source = current.OtherProcedureIds;
string target = presenter.Entities.Select(a => a.Id).ToString(",");
current.OtherProcedureIds = target;
_txtOtherProcedures.SetText(current.OtherProcedures.Select(a => a.Name).ToString(","));
this.RaiseEditedEvent(new EditedEventArgs(_bindings.CurrentEntity, EditState.Update, "OtherProcedureIds"));
}
}
private IProcedureRepository _procedureRepository;
public IProcedureRepository ProcedureRepository
{
get
{
if (_procedureRepository == null)
_procedureRepository = ModuleBase.RootContainer.Resolve<IProcedureRepository>();
return _procedureRepository;
}
}
5、维护视图ProcedureDetailView.xaml布局增加控件元素:
<Label Content="其他手术" Grid.Row="17" />
<Grid Grid.Row="17" Grid.Column="1" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="20" />
</Grid.ColumnDefinitions>
<TextBox Name="_txtOtherProcedures" MaxLength="5000" Grid.Column="0"/>
<Button Grid.Column="1" Name="_btnSort" Click="_btnSort_Click" HorizontalAlignment="Right" VerticalAlignment="Center"
Content="..." Width="20" FontSize="14" FontWeight="Bold" Height="20"
Padding="0" BorderThickness="1" />
</Grid>
6、下面是实现多选或排序字典实体本身功能:
6.1 PickableEntitiesSortingView.xaml
<UserControl x:Class="JetSun.PatientAdministration.Layout.PickableEntitiesSortingView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ToolBarTray Name="_toolBarTray" Grid.Row="0" VerticalAlignment="Top">
<ToolBar HorizontalAlignment="Left" Name="_tlbMain" />
</ToolBarTray>
<Grid Grid.Row="1" Name="_mainGrid">
<ContentControl Name="_Grid" />
</Grid>
</Grid>
</UserControl>
6.2 定义一个支持的表格设置文件:
<DataGrid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:js="http://schemas.jetsun.com.cn/his/2009/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="名称" Width="160" Binding="{Binding Path=Name}" />
<DataGridTextColumn IsReadOnly="True" Header="编码" Width="80" Binding="{Binding Path=Code}" />
<DataGridTextColumn IsReadOnly="True" Header="拼音码" Width="80" Binding="{Binding Path=SpellCode}" />
<DataGridTextColumn IsReadOnly="True" Header="五笔码" Width="80" Binding="{Binding Path=WBCode}" />
</DataGrid.Columns>
</DataGrid>
6.3 PickableEntitiesSortingView.xaml.cs
using System.Windows.Controls;
using JetSun.Infrastructure;
using JetSun.DomainModel;
using JetSun.Presentation;
namespace JetSun.PatientAdministration.Layout
{
/// <summary>
/// PickableEntitiesSortingView.xaml 的交互逻辑
/// </summary>
[DefaultMapping(typeof(IPickableEntitiesSortingView))]
public partial class PickableEntitiesSortingView : UserControl, IPickableEntitiesSortingView
{
public PickableEntitiesSortingView()
{
InitializeComponent();
}
public ToolBar MainBar
{
get { return _tlbMain; }
}
public void FillGrid(DataGrid mainGrid)
{
_Grid.Content = mainGrid;
}
public PickableEntitiesSortingPresenter Presenter { get; set; }
//IBindingCollection<IPickableObject> _bindings = null;
public void OnBindingManagerReady(IBindingManager bindingManager)
{
//_bindings = bindingManager.GetCollection<IPickableObject>(this);
//_bindings.AddBinding(_Code, a => a.Code);
//_bindings.AddBinding(_Name, a => a.Name);
//_bindings.AddBinding(_Note, a => a.Note).Binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
//_bindings.CurrentChanged -= _bindings_CurrentChanged;
//_bindings.CurrentChanged += _bindings_CurrentChanged;
//_bindings.Edited -= _bindings_Edited;
//_bindings.Edited += _bindings_Edited;
}
}
}
6.4 实现表示器PickableEntitiesSortingPresenter.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JetSun.Presentation;
using System.Windows.Controls;
using Microsoft.Practices.Prism.Commands;
using JetSun.DomainModel;
using JetSun.Infrastructure;
using System.Windows;
using JetSun.Presentation.Markups;
using JetSun.PatientAdministration.Presentation;
namespace JetSun.PatientAdministration.Layout
{
[DefaultMapping(typeof(IPickableEntitiesSortingPresenter))]
public class PickableEntitiesSortingPresenter : Presenter<IPickableEntitiesSortingView>, IPickableEntitiesSortingPresenter, ICloseAware
{
#region override
protected override void OnBuiltUp(object buildKey)
{
base.OnBuiltUp(buildKey);
InitCommands();
InitDataGrid();
InitControls();
}
protected override void OnViewLoaded()
{
base.OnViewLoaded();
}
#endregion
#region InitControls
private IBindingManager _bindingManager;
private void InitControls()
{
_bindingManager = UseCase.Items.GetOrCreate<IBindingManager>(Guid.NewGuid().ToString(), SearchMode.Local);
View.OnBindingManagerReady(_bindingManager);
_bindingManager.Edited += new EventHandler<EditedEventArgs>(_bindingManager_Edited);
}
void _bindingManager_Edited(object sender, EditedEventArgs e)
{
MainCommands[CommandNames.Save].SetStatus(true);
}
#endregion
#region InitDataGrid
SelectorFacade _selector;
IDataGridManager<IPickableObject> _gridManager;
private const string conMainGrid = "PickableObjectDataGrid";
private void InitDataGrid()
{
_gridManager = UseCase.Items.AddNew<IDataGridManager<IPickableObject>>();
_gridManager.Load(new DataGridKind(typeof(IPickableObject), ShellEnvironment.GetResourceUri(conMainGrid)), null, true);
_gridManager.IsReadOnly = true;
_gridManager.AllowAdd = false;
_gridManager.AllowEdit = false;
_gridManager.AllowRemove = false;
_gridManager.AllowSort = true;
_gridManager.BackupMode = EntityBackupMode.Items;
_gridManager.DataGrid.SelectionMode = DataGridSelectionMode.Single;
_gridManager.DataGrid.SelectionUnit = DataGridSelectionUnit.FullRow;
this.View.FillGrid(_gridManager.DataGrid);
}
#endregion
#region InitCommands
private ToolBarCommandCollection _mainCommands;
private ToolBarCommandCollection MainCommands
{
get
{
if (_mainCommands == null)
_mainCommands = UseCase.Items.GetOrCreate<ToolBarCommandCollection>(Guid.NewGuid().ToString(), Infrastructure.SearchMode.Local);
return _mainCommands;
}
}
private ToolBarCommandCollection _itemCommands;
private ToolBarCommandCollection ItemCommands
{
get
{
if (_itemCommands == null)
_itemCommands = UseCase.Items.GetOrCreate<ToolBarCommandCollection>(Guid.NewGuid().ToString(), Infrastructure.SearchMode.Local);
return _itemCommands;
}
}
private bool _isDataChanged;
public bool IsDataChanged
{
get { return _isDataChanged; }
private set
{
_isDataChanged = value;
MainCommands[CommandNames.Save].SetStatus(value);
}
}
CommandItem _splitCommandItem = new CommandItem();
private void InitCommands()
{
CommandItem root = CommandItem.CreateRoot();
root.Children.AddRange(CommandNames.MoveUp, CommandNames.MoveDown, _splitCommandItem, CommandNames.Confirm, new CommandItem(), CommandNames.Exit);
MainCommands.Attach(string.Empty, View.MainBar, root.Children, UseCase);
MainCommands[CommandNames.MoveUp].RegisterCommand(new DelegateCommand(this.ExecMoveUp));
MainCommands[CommandNames.MoveDown].RegisterCommand(new DelegateCommand(this.ExecMoveDown));
MainCommands[CommandNames.Confirm].RegisterCommand(new DelegateCommand<object>(this.ExecSave));
MainCommands[CommandNames.Exit].RegisterCommand(new DelegateCommand(this.ExecExit));
}
public IList<IBusinessObject<int>> GetSelectedItems()
{
IList<IBusinessObject<int>> selectItems = new List<IBusinessObject<int>>();
if (_selector != null)
{
selectItems = _selector.SelectedItems.CastAs<IBusinessObject<int>>().ToList();
}
return selectItems;
}
private bool _isSelectorUsage;
public bool IsSelectorUsage
{
get { return _isSelectorUsage; }
set
{
_isSelectorUsage = value;
if (value)
{
if (_selector == null)
{
_selector = SelectorFacadeFactory.CreateFacade(_gridManager.DataGrid);
_selector.IsMultiSelected = true;
_selector.UnselectReturnCurrent = false;
_selector.ItemSelectChanged -= _selector_ItemSelectChanged;
_selector.ItemSelectChanged += _selector_ItemSelectChanged;
}
MainCommands[CommandNames.MoveUp].Status = CommandStatus.Unavailable;
MainCommands[CommandNames.MoveDown].Status = CommandStatus.Unavailable;
_splitCommandItem.Control.Visibility = Visibility.Collapsed;
}
else
{
MainCommands[CommandNames.MoveUp].SetStatus(true);
MainCommands[CommandNames.MoveDown].SetStatus(true);
_splitCommandItem.Control.Visibility = Visibility.Visible;
}
}
}
private void _selector_ItemSelectChanged(object sender, EventArgs<object> e)
{
this.IsDataChanged = true;
}
public IList<IBusinessObject<int>> BackupEntities { get; private set; }
public void RefreshData(IList<IPickableObject> entities)
{
this.BackupEntities = entities.CastAs<IBusinessObject<int>>().ToList();
_gridManager.BindTo(entities);
if (_selector != null)
_selector.Clear();
this._askSaved = false;
this.IsDataChanged = false;
this.IsOK = false;
}
private void ExecMoveUp()
{
MoveCurrent(-1);
}
private void ExecMoveDown()
{
MoveCurrent(1);
}
private void MoveCurrent(int offset)
{
IPickableObject model = _gridManager.Current;
IPickableObject next = GetNext(model, offset);
if (next == null) return;
_gridManager.Move(model, offset);
_gridManager.DataGrid.SetCurrentRow(model, true);
_gridManager.DataGrid.Focus();
OnEdit(EditedEventArgs.AnonymousUpdate);
this.IsDataChanged = true;
}
private IPickableObject GetNext(IPickableObject model, int offset)
{
if (model == null) return null;
int index = _gridManager.IndexOf(model);
return _gridManager.GetItem(index + offset);
}
public event EventHandler<EditedEventArgs> Edited;
private void OnEdit(EditedEventArgs e)
{
ViewPart.RaiseEditedEvent(e);
if (Edited != null)
Edited(this, e);
}
public bool IsOK { get; private set; }
public IList<IBusinessObject<int>> Entities { get; private set; }
private void ExecSave(object parameter)
{
this._askSaved = true;
if (this.IsDataChanged || this.GetSelectedItems().Count > 0)
{
this.IsOK = true;
IList<IPickableObject> items = _gridManager.AsEnumerable().ToList();
this.Entities = items.CastAs<IBusinessObject<int>>().ToList();
}
bool hidden = true;
if (parameter != null)
{
hidden = (bool)parameter;
}
if (hidden)
{
this.HideView();
}
}
private bool _askSaved;
private bool AskSaved()
{
_askSaved = true;
if (this.IsSelectorUsage)
{
if (this.GetSelectedItems().Count > 0)
{
if (MessageHelper.ShowDialog("已有选定其他手术,是否复制?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
return true;
}
}
}
else
{
if (this.IsDataChanged)
{
if (MessageHelper.ShowDialog("排序已修改,是否更新排序?", "提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
return true;
}
}
}
return false;
}
private void ExecExit()
{
if (AskSaved())
{
ExecSave(false);
}
this.HideView();
}
#endregion
#region ICloseAware
public void OnClosed()
{
}
public void OnClosing(ref bool cancel)
{
if (!_askSaved && AskSaved())
{
ExecSave(false);
}
}
#endregion
}
public interface IPickableEntitiesSortingView : IDetailView, IPresenterDependent<PickableEntitiesSortingPresenter>
{
ToolBar MainBar { get; }
void FillGrid(DataGrid mainGrid);
}
public interface IPickableEntitiesSortingPresenter : IPresenter, IPresenterBase, IViewPresenter, IBuilderAware
{
bool IsSelectorUsage { get; set; }
IList<IBusinessObject<int>> GetSelectedItems();
void RefreshData(IList<IPickableObject> entities);
bool IsDataChanged { get; }
bool IsOK { get; }
IList<IBusinessObject<int>> Entities { get; }
}
}
浙公网安备 33010602011771号