Validación WPF en un control del elementalHost -- wpf campo con validation campo con elementhost camp Relacionados El problema

WPF Validation in an ElementHost control


0
vote

problema

Español

Tengo un formulario de WinForms que contiene un control de elementhost (que contiene un WPF UserControl) y un botón Guardar.

En el WPF usercontrol, tengo un cuadro de texto con alguna validación en ella. Algo así ...

  <TextBox Name="txtSomething" ToolTip="{Binding ElementName=txtSomething, Path=(Validation.Errors).[0].ErrorContent}">     <Binding NotifyOnValidationError="True" Path="Something">         <Binding.ValidationRules>             <commonWPF:DecimalRangeRule Max="1" Min="0" />         </Binding.ValidationRules>     </Binding> </TextBox>   

Todo esto funciona bien. Sin embargo, lo que quiero hacer, es deshabilitar el botón Guardar mientras el formulario está en un estado no válido.

Cualquier ayuda sería muy apreciada.

Original en ingles

I've got a WinForms form that contains an ElementHost control (which contains a WPF UserControl) and a Save button.

In the WPF UserControl I've got a text box with some validation on it. Something like this...

<TextBox Name="txtSomething" ToolTip="{Binding ElementName=txtSomething, Path=(Validation.Errors).[0].ErrorContent}">     <Binding NotifyOnValidationError="True" Path="Something">         <Binding.ValidationRules>             <commonWPF:DecimalRangeRule Max="1" Min="0" />         </Binding.ValidationRules>     </Binding> </TextBox> 

This all works fine. What I want to do however, is disable the Save button while the form is in an invalid state.

Any help would be greatly appreciated.

        

Lista de respuestas

1
 
vote

creo que esto debería ayudarlo:

  <UserControl Validation.Error="Validation_OnError > <UserControl.CommandBindings>        <CommandBinding Command="ApplicationCommands.Save" CanExecute="OnCanExecute" Executed="OnExecute"/>  </UserControl.CommandBindings>  ... <Button Command="ApplicationCommands.Save" /> ... </UserControl>  /* put this in usercontrol's code behind */ int _errorCount = 0; private void Validation_OnError(object sender, ValidationErrorEventArgs e) {     switch (e.Action)     {         case ValidationErrorEventAction.Added:             { _errorCount++; break; }         case ValidationErrorEventAction.Removed:             { _errorCount--; break; }     } }  private void OnCanExecute(object sender, CanExecuteRoutedEventArgs e) {     e.CanExecute = _errorCount == 0; }   

Luego, tal vez podría informar el formulario principal sobre un cambio con un evento registrado en el UserControl.

 

I think this should help you:

<UserControl Validation.Error="Validation_OnError > <UserControl.CommandBindings>        <CommandBinding Command="ApplicationCommands.Save" CanExecute="OnCanExecute" Executed="OnExecute"/>  </UserControl.CommandBindings>  ... <Button Command="ApplicationCommands.Save" /> ... </UserControl>  /* put this in usercontrol's code behind */ int _errorCount = 0; private void Validation_OnError(object sender, ValidationErrorEventArgs e) {     switch (e.Action)     {         case ValidationErrorEventAction.Added:             { _errorCount++; break; }         case ValidationErrorEventAction.Removed:             { _errorCount--; break; }     } }  private void OnCanExecute(object sender, CanExecuteRoutedEventArgs e) {     e.CanExecute = _errorCount == 0; } 

Then you could perhaps inform the mainform about a change with an event registered on the usercontrol.

 
 
0
 
vote
vote
La mejor respuesta
 

Bueno, finalmente he trabajado una solución a mi problema.

En el control WPF, agregué esto al evento Loaded .

  global $wpdb; $results = $wpdb->get_results( "SELECT comment_post_ID FROM wp_comments WHERE comment_date > '" . date("Y-m-d H:m:s", strtotime('-24 hours', time())) . "'", OBJECT ); 0  

Dónde global $wpdb; $results = $wpdb->get_results( "SELECT comment_post_ID FROM wp_comments WHERE comment_date > '" . date("Y-m-d H:m:s", strtotime('-24 hours', time())) . "'", OBJECT ); 111/esebre, se define como esto:

  global $wpdb; $results = $wpdb->get_results( "SELECT comment_post_ID FROM wp_comments WHERE comment_date > '" . date("Y-m-d H:m:s", strtotime('-24 hours', time())) . "'", OBJECT ); 2  

Finalmente agregué un evento llamado global $wpdb; $results = $wpdb->get_results( "SELECT comment_post_ID FROM wp_comments WHERE comment_date > '" . date("Y-m-d H:m:s", strtotime('-24 hours', time())) . "'", OBJECT ); 3 que contiene un global $wpdb; $results = $wpdb->get_results( "SELECT comment_post_ID FROM wp_comments WHERE comment_date > '" . date("Y-m-d H:m:s", strtotime('-24 hours', time())) . "'", OBJECT ); 4 Boolean en su evento Args. Luego pude conectar este evento en mi forma para decirle que el control es válido o no.

Si hay una mejor manera de estar interesado en aprender.

 

Well, I've finally worked out a solution to my problem.

In the WPF control I added this to the Loaded event.

Validation.AddErrorHandler(this.txtSomething, ValidateControl); 

Where ValidateControl above, is defined as this:

private void ValidateControl(object sender, ValidationErrorEventArgs args) {     if (args.Action == ValidationErrorEventAction.Added)        OnValidated(false);     else        OnValidated(true); } 

Finally I added an event called Validated which contains an IsValid boolean in its event args. I was then able to hook up this event on my form to tell it that the control is valid or not.

If there is a better way I'd be interested to learn.

 
 

Relacionados problema

1  Fondo negro antes de cargar un control WPF cuando use ElementHost  ( Black background before loading a wpf controll when using elementhost ) 
Estoy usando WPF en WinForms con ElementHost. Cuando el formulario se carga, hay un destello de fondo negro donde el elementalHost está a punto de cargarse. E...

7  Wpf showdialog y elementalhost  ( Wpf showdialog and elementhost ) 
¿Es posible mostrar una ventana modal de un control de usuario WPF, es decir, un niño de un elementalhost, y configura el propietario / padre de la ventana mo...

0  El anfitrión de elementos no cambia el tamaño del niño correctamente  ( Element host doesnt resize child properly ) 
Estoy alojando un control WPF en WinForms usando el control ElementHost. Cuando intento cambiar el tamaño del elementalHost (en altura), además, la posición o...

1  WPF RichTextBox en la aplicación WinForms  ( Wpf richtextbox in winforms application ) 
Me gustaría usar un WPF RichTextBox en un proyecto de WinForms escrito con VB He creado el proyecto WinForms con una forma y un botón Luego agregué una nuev...

0  Obtenga texto del control de RichText WPF alojado en ElementHost en WinForms en C #  ( Get text from richtext wpf control hosted in elementhost on winforms in c sharp ) 
Tengo una forma de WinForm en C # .NET 4.6 que tiene un host de elemento. Esto alberga un USERCONTROL que contiene un WPF RichTextBox. Quiero obtener el texto...

3  Cambiar el tamaño del formulario basado en el tamaño del elementalHost  ( Resize form based on elementhost size ) 
Tengo un Form(winform) y contiene = form.select(:job_id, Job.all.map { |job| [job.name.titleize, job.id] }, {prompt: 'Job'}, {:class => 'form-control'}) 0 ...

0  Eventos de Rookwheel en Control de WPF alojados en Formularios de Windows  ( Mousewheel events in wpf control hosted in windows forms ) 
Tengo una aplicación de Formularios de Windows, que tiene un control de usuario WPF, disponible a través del control ElementHost. El control de usuario WPF ...

0  ¿Cómo resolver el error en el componente WPF en el proyecto C # Windows Forms?  ( How to solve the error in wpf component on c sharp windows forms project ) 
He creado el proyecto Windows C #. Hay un formulario de Windows. En el mismo proyecto, creé un componente WPF y cuando intento colocar este componente en el f...

20  WPF TextBox que no acepta la entrada cuando se encuentra en el elementalHost en las formas de la ventana  ( Wpf textbox not accepting input when in elementhost in window forms ) 
Estamos desarrollando un control de UI en WPF que se consume dentro de un motor de aplicación de Windows Forms / MFC existente (Rhino 3D). El motor de la ap...

12  El texto hace de manera diferente en la ventana de WPF y dentro del elementalhost  ( Text renders differently on wpf window and inside elementhost ) 
Utilizo la interoperabilidad WPF para host de control de usuario WPF dentro del formulario WinForms. Todo funciona bien, excepto la representación de texto fe...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos