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