2015-07-20 2 views
0

Im пытается реализовать проверку на viewModel в Catel.Проверка на viewmodel + Catel

Я прочитал документацию, и это выглядит очень просто, но почему-то я, вероятно, что-то пропустил для этого конкретного случая. У меня есть пользовательский элемент управления, в котором есть два пользовательских элемента управления. Один из них - пользовательский элемент управления, который я буду использовать в качестве настраиваемой командной строки, а другой - подробное представление модели.

<catel:UserControl x:Class="SICUAP.Views.CatProducto_CategoriasView" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:catel="http://catel.codeplex.com" 
       xmlns:Views="clr-namespace:SICUAP.Views"> 

<!-- Resources --> 
<UserControl.Resources> 
</UserControl.Resources> 

<!-- Content --> 
<catel:StackGrid> 
    <catel:StackGrid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </catel:StackGrid.RowDefinitions> 
    <Views:cmdGlobalesBDView></Views:cmdGlobalesBDView> 
    <Label Content="Catalogo de Categorias de Producto" Style="{StaticResource estiloTituloControl}"> 
    </Label> 
    <Views:dataProducto_CategoriasView /> 

</catel:StackGrid> 

Панель команд имеет только одна кнопку с привязкой к глобальной команде.

<Button Width="50" Height="50" VerticalAlignment="Center" HorizontalAlignment="Center" ToolTip="Salvar" Command="{catel:CommandManagerBinding Salvar}" 
        Style="{StaticResource MetroCircleButtonStyle}"> 
     <Rectangle Width="20" Height="20" Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" > 
      <Rectangle.OpacityMask> 
       <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_save}" /> 
      </Rectangle.OpacityMask> 
     </Rectangle> 
    </Button> 

И это мнение подробно

<catel:UserControl x:Class="SICUAP.Views.dataProducto_CategoriasView" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:catel="http://catel.codeplex.com"> 
<UserControl.Resources> 
</UserControl.Resources> 
<catel:StackGrid> 
    <catel:StackGrid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
    </catel:StackGrid.RowDefinitions> 
    <GroupBox Header="Datos de la Categoria del Producto"> 
     <catel:StackGrid> 
      <catel:StackGrid.RowDefinitions> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
      </catel:StackGrid.RowDefinitions> 
      <catel:StackGrid.ColumnDefinitions> 
       <ColumnDefinition Width="300"></ColumnDefinition> 
       <ColumnDefinition Width="100"></ColumnDefinition> 
       <ColumnDefinition Width="200"></ColumnDefinition> 
      </catel:StackGrid.ColumnDefinitions> 
      <Label Content="Nombre:"></Label> 
      <Label Content="Activo:"></Label> 
      <catel:EmptyCell></catel:EmptyCell> 
      <TextBox Margin="5" Text="{Binding Nombre, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"></TextBox> 
      <CheckBox Margin="5" IsChecked="{Binding Activo}"></CheckBox> 
      <catel:EmptyCell></catel:EmptyCell> 
      <Label Content="Descripcion:"></Label> 
      <catel:EmptyRow></catel:EmptyRow> 
      <TextBox Margin="5" TextWrapping="Wrap" AcceptsReturn="True" Grid.ColumnSpan="3" Height="200" Text="{Binding Descr,ValidatesOnDataErrors=True, NotifyOnValidationError=True}"></TextBox> 
     </catel:StackGrid> 
    </GroupBox> 
</catel:StackGrid> 

Я создаю команду и привязать его к сводке проверки на конструкторе модели представления детали.

public dataProducto_CategoriasViewModel(ICommandManager commandManager, IMessageService messageService) 
    { 
     Catel.Argument.IsNotNull(() => commandManager); 
     Catel.Argument.IsNotNull(() => messageService); 
     _commandManager = commandManager; 
     _messageService = messageService;    
     Salvar = CommandHelper.CreateCommand(OnSalvarExecute,()=>CategoriaProductoValidationSummary); 
     _commandManager.RegisterCommand(Comandos.Catalogos.Salvar, Salvar, this); 
    } 

И это мое свойство сводки валидации и переопределения для ValidateFields.

[ValidationToViewModel(Tag = "ValidacionCategoriaProducto")] 
    public IValidationSummary CategoriaProductoValidationSummary { get; set; } 

    protected override void ValidateFields(List<IFieldValidationResult> validationResults) 
    { 
     if (string.IsNullOrEmpty(Nombre)) 
      validationResults.Add(FieldValidationResult.CreateErrorWithTag(NombrePropiedad, "Nombre es requerido","ValidacionCategoriaProducto")); 
     if (string.IsNullOrEmpty(Descr)) 
      validationResults.Add(FieldValidationResult.CreateErrorWithTag(DescrPropiedad, "Descripcion es requerido", "ValidacionCategoriaProducto"));   
    } 

ValidateFields никогда не запускается. И кнопка всегда включена. Я пропустил что-то вроде регистра сервиса или что-то еще?

+1

Можете ли вы попробовать нажать ОК/Сохранить? Это может быть проверка, которая задерживается до первого вызова сохранения. –

ответ

0

Уже найдена моя ошибка. При создании проекта с шаблоном оркестра, он добавляет эти строки в начале App.xaml.cs

Catel.Windows.Controls.UserControl.DefaultCreateWarningAndErrorValidatorForViewModelValue = false; 
Catel.Windows.Controls.UserControl.DefaultSkipSearchingForInfoBarMessageControlValue = true; 
Catel.Data.ModelBase.SuspendValidationForAllModels = true; 

Они отключить проверка функций, поэтому их удаление должно быть более чем достаточно.

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