2015-05-29 4 views
0

Я пытаюсь реализовать проверку более разумным способом, как я могу ... С самого начала у меня есть gridview с некоторыми данными, загружаемыми из БД (объект не наследуется от ModelBase). Когда пользователь щелкнет правой кнопкой мыши по редактированию элемента, появится всплывающее окно редактирования.Проверка с Catel и довольно сложным объектом

Это код, который загрузить всплывающее окно

public override async Task UpdateDeal(IDeal deal) 
    { 
     var item = (DealForward)deal.Clone(); 
     var modello = viewModelFactory.CreateViewModel<DealForwardUpdateViewModel>(item); 



     var dependencyResolver = this.GetDependencyResolver(); 
     var uiVisualizerService = dependencyResolver.Resolve<IUIVisualizerService>(); 

     await uiVisualizerService.ShowDialogAsync(modello); 
    } 

И вот DealForwardUpdateViewModel

public class DealForwardUpdateViewModel : DealUpdateViewModel 
{ 
    #region Model 
    [Model] 
    public DealForwardUpdateModel Model 
    { 
     get { return GetValue<DealForwardUpdateModel>(DealForwardUpdateModelProperty); } 
     set { SetValue(DealForwardUpdateModelProperty, value); } 
    } 
    public static readonly PropertyData DealForwardUpdateModelProperty = RegisterProperty("Model", typeof(DealForwardUpdateModel), null); 
    #endregion 

    #region Properties 
    [ViewModelToModel("Model")] 
    public DealForward Deal 
    { 
     get { return GetValue<DealForward>(DealProperty); } 
     set { SetValue(DealProperty, value); } 

    } 

    public static readonly PropertyData DealProperty = RegisterProperty("Deal", typeof(DealForward), null); 

    #endregion 

    #region Ctor 
    public DealForwardUpdateViewModel(DealForward forward, IDynamicContainer container) 
    { 
     this.Model = new DealForwardUpdateModel(forward); 

     this.container = container; 
    } 

Я не уверен, что положить в DealForwardUpdateModel, я должен поставить только DealForward или сделать Я должен взорвать его в свои поля, когда я нахожусь в конструкторе?

public class DealForwardUpdateModel : ModelBase 
{ 
    public double? Cambio { get; set; } 

    public DealForwardUpdateModel(DealForward deal) 
    { 
     this.Deal = deal; 
     this.Cambio = deal.Cambio; 
    } 
    public DealForward Deal 
    { 
     get { return GetValue<DealForward>(DealProperty); } 
     set { SetValue(DealProperty, value); } 
    } 
    public static readonly PropertyData DealProperty = RegisterProperty("Deal", typeof(DealForward), null); 
} 

[ValidatorDescription("DealForwardUpdateModel", Catel.Data.ValidationResultType.Error, Catel.ValidationType.Field)] 
public class DealForwardUpdateModelValidator : AbstractValidator<DealForwardUpdateModel> 
{ 
    public DealForwardUpdateModelValidator() 
    { 
     RuleFor(x => x.Deal.Split).SetValidator(new SplitValidator()); 

     RuleFor(x => x.Cambio).GreaterThan(0).WithMessage(DealResources.STR_VALIDATION_CAMBIO); 

     RuleFor(x => x.Deal.QtaDiv1).LessThan(0).When(x => x.Deal.Segno == 1).WithMessage(DealResources.STR_VALIDATION_NEGATIVE_QTA1); 
     RuleFor(x => x.Deal.QtaDiv1).GreaterThanOrEqualTo(0).When(x => x.Deal.Segno == 0).WithMessage(DealResources.STR_VALIDATION_POSITIVE_QTA1); 

     RuleFor(x => x.Deal.QtaDiv2).LessThan(0).When(x => x.Deal.QtaDiv1 > 0).WithMessage(DealResources.STR_VALIDATION_OPPOSITE_QTA2); 
     RuleFor(x => x.Deal.QtaDiv2).GreaterThan(0).When(x => x.Deal.QtaDiv1 < 0).WithMessage(DealResources.STR_VALIDATION_OPPOSITE_QTA2); 
    } 
} 

Второй вариант, кажется, работает, но перед тем как ударять мой DealForward в список полей я спросить, если есть лучший Подход.

Пожалуйста, обратите внимание, что я имею 3/4 различного рода сделку, и они имеют разделяемую редактируемую/подтверждаемую Часть

Благодаря

ответ

1

Есть несколько способов, вы можете осуществить проверку:

  1. Validar (плагин Fody), как вы делали в своем втором примере
  2. FluentValidation (Catel имеет расширение)
  3. Простой Validati который доступен в моделях/моделях просмотра, путем переопределения ValidateFields и ValidateBusinessRules

1 и 2 дают хороший SoC (Разделение проблем).

+0

Я использовал 2 ... Поскольку у меня есть «расширяемый» набор полей для проверки, и я видел, что могу составлять представления с вложенными режимами просмотра/просмотра https://catelproject.atlassian.net/ wiki/display/CTL/Introduction + to + + вложенные + пользователь + элементы управления + проблема ... применяется ли проверка, даже если существуют разные виды/режимы просмотра – advapi

Смежные вопросы