Gracias por la respuesta José
Bueno, ahora usamos el ValidatorEngine, nos las arreglamos para enviar
mensajes con MessageBox() con el código:
public void Configure(IWindsorContainer container)
{
var ve = new ValidatorEngine();
container.Register(Component.For<IEntityValidator>().ImplementedBy<EntityValidator>());
container.Register(Component.For<ValidatorEngine>().Instance(ve).LifeStyle.Singleton);
container.Register(Component.For<ISharedEngineProvider>().ImplementedBy<SharedEngineProvider>());
NHibernate.Validator.Cfg.Environment.SharedEngineProvider =
container.Resolve<ISharedEngineProvider>();
var configure = new FluentConfiguration();
configure.Register(typeof(SlabValidation).Assembly.ValidationDefinitions())
.SetDefaultValidatorMode(ValidatorMode.OverrideAttributeWithExternal)
.IntegrateWithNHibernate.ApplyingDDLConstraints().And.RegisteringListeners();
ve.Configure(configure);
}
La validación de los campos:
[PersistenceConversation(Exclude = true)]
public Int32 HasFieldInvalid(object entity)
{
InvalidFields = String.Empty;
var errors = entityValidator.Validate(entity);
foreach (IInvalidValueInfo error in errors)
if (InvalidFields.Equals(String.Empty))
InvalidFields = "- " + error.Message;
else
InvalidFields = InvalidFields + ";\n- " +
error.Message;
InvalidFields = InvalidFields + ".";
return errors.Count;
}
El vínculo:
<Style TargetType="{x:Type ct:TextBoxExtended}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ct:TextBoxExtended.ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
<ct:TextBoxExtended Name="txbQualidade" Text="{Binding
PlacasSelectedItem.Slab.InfSteelQuality, ValidatesOnDataErrors=True,
NotifyOnValidationError=True}" IsReadOnly="{Binding IsEditing,
Mode=OneWay, UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource InverseBooleanConverter}}"/>
En los últimos dos bloques de código que pueden hacer la unión. Ahí
está nuestro problema. UtilizandoIDataErrorInfo en la entidad, que es
nativa de WPF, funcionó. Para ello, use este código, dentro de la
entidad:
public string Error
{
get { throw new NotImplementedException(); }
}
public string this[string columnName]
{
get
{
string result = null;
if (columnName == "InfSteelQuality")
{
if (String.IsNullOrEmpty(InfSteelQuality))
result = "Error 1";
else if (InfSteelQuality.Length < 5)
result = "Error 2";
}
return result;
}
}
Pero la eliminación del código sobre el cuerpo y usando sólo el
NHibernateValidator no puede ver el erroren la unión de la caja de
texto, a poca distancia a través de cuadro de mensaje.
También se encuentra en el interior del Chinook, el siguiente código
existe dentro de EntitiesConfigurator:
public void Configure(IWindsorContainer container)
{
container.AddFacility<ComponentBehaviorsFacility>();
var config = new BehaviorDictionary();
config.For<Album>().Add<DataErrorInfoBehavior>()
.Add<NotifyPropertyChangedBehavior>();
container.Register(Component.For<IBehaviorStore>().Instance(config));
container.Register(Component.For<Album>()
.OnCreate((kernel,
album) => album.Tracks = new ObservableCollection<Track>())
.LifeStyle.Transient);
container.Register(Component.For<IEntityFactory>()
.ImplementedBy<EntityFactory>());
}
En la versión actual de uNhAddIns, más proyectos:
uNhAddIns.ComponentBehaviors;
uNhAddIns.ComponentBehaviors.Castle;
Desde DataErrorInfoBehavior se fija en ellos, porque estos proyectos
fueron retirados?
Gracias de antemano.
On 27 out, 10:55, José F. Romaniello <[email protected]> wrote:
> Lo único que tienes que hacer es implementar IDataErrorInfo en la clase que
> bindeas a la interfaz y vas a ver los mensajes de error en la pantalla.
>
> IDataErrorInfo tiene dos metodos uno en el que tienes que devolver todos los
> mensajes de error de la entidad y otro en el que devuelves los mensaje de
> error de una propiedad particular.
>
> Si tu entidad se válida con nhibernate validator, dentro de la
> implementación de idataerrorinfo podrías usar el ValidatorEngine para
> validar y devolver los mensajes de error concatenados con un salto de línea
> por ejemplo.
>
> Lo mejor sería que abstraigas ValidatorEngine con una interfaz tuya.
>
> 2011/10/27 Gustavo Souza Gonçalves <[email protected]>
>
>
>
>
>
>
>
> > Buenos días a todos!
>
> > Estamos desarrollando una aplicación, que utiliza
> > NHibernate,uNhAddIns, y el patrón MVVM, y decidió hacer la validación
> > de cada campo en la pantalla que se asigna en NHibernate. En el tiempo
> > de grabación para lanzar el sistema, el Validador Nhibernate trabaja y
> > le dicelo que el campo no está presente, pero cuando se borre el
> > campo, no le dice lo que está vacío, mientras que el nativo de
> > validación de WPF, dice. Durante la depura, piense en lo siguiente:
>
> > ¿Cuáles son las ventajas de Nhibernate de validación? ¿Qué es lo
> > quejustifica Nhibernate Validador de uso en lugar del predeterminado
> > de validación de WPF?
>
> > Gracias de antemano.
>
> > --
> > Para escribir al Grupo, hágalo a esta dirección:
> > [email protected]
> > Para más, visite:http://groups.google.com/group/NHibernate-Hispano
--
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano