Quiero abrir una ventana si se hace clic en un botón, y ese botón se encuentra en otra ventana. Entonces, ¿cómo verificar si se hace clic en un botón de otra ventana o no?

Ahora estoy codificando en una clase llamada 'RightButton.cs'. Quiero abrir una ventana llamada 'PopUp' cuando se hace clic en el botón 'Agregar' en la ventana 'Razón'.

PaidOutReason paid = new PaidOutReason(trnprt, apiParameters); 

paid.ShowDialog(); 

if (paid.btnSave.ClickMode == new ClickMode()) 
{ 
    PopUpBanks popu = new PopUpBanks(this); 
    popu.Show(); 
}

Este funcionaba perfectamente, pero tuve que eliminar ShowDialog () y reemplazarlo con Show (). Entonces no estaba funcionando.

Esto es para un sistema POS. Tiene un Control de usuario llamado 'Teclado'. Cuando se abre la ventana 'Razón', este teclado también quiere abrirse. Por lo tanto, tuve que reemplazar ShowDialog () con Show ().

0
Chameena Hiruni 10 sep. 2018 a las 08:06

5 respuestas

La mejor respuesta

En lugar de la Ventana del teclado, lo convertí en un control de usuario y luego inicialicé un evento allí. Luego inserto ese control de usuario del teclado en la ventana PaidOutReason y luego llamo al evento. Luego pude usar ShowDialog () para llamar a la ventana.

0
Chameena Hiruni 13 sep. 2018 a las 08:58

Agregaría un evento a la ventana y vincularía un controlador de eventos.

class WndWindow{
    BtnPaid_Click(object sender, EventArgs e){
        using(var paid = new PaidOutReason()){
            paid.BtnAddClick += Paid_BtnAddClick;
            paid.ShowDialog();
            paid.BtnAddClick -= Paid_BtnAddClick;
        }
    }

    Paid_BtnAddClick(object sender, EventArgs e){
        var popu = new PopUpBanks();
        popu.Show();
    }
}

class PaidOutReason{
    public event EventHandler BtnAddClick;

    BtnAdd_Click(object sender, EventArgs e){
        //Do standard event handler code

        BtnAddClick?.Invoke(this, e);
    }
}

Si necesita realizar algún tipo de verificación, puede hacerlo antes de leer el evento y simplemente regresar si las verificaciones fallan.

3
TheBeardedQuack 10 sep. 2018 a las 07:26

Controle el evento Click de btnSave:

PaidOutReason paid = new PaidOutReason(trnprt, apiParameters);
paid.btnSave.Click += (ss, ee) => 
{
    PopUpBanks popu = new PopUpBanks(this);
    popu.Show();
};
paid.Show();
1
mm8 11 sep. 2018 a las 15:21

Si está utilizando el patrón MVVM, puede usar el enlace de comando para mostrar la ventana PopupBanks. Por ejemplo:

public class ViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public ICommand AddCommand { get; set; }

        public ViewModel()
        {
            AddCommand = new RelayCommand(AddCommandHandler);

        }

        private void AddCommandHandler()
        {
            IPopUpBanks popu = new PopUpBanks(this);
            popu.Show();
        }
    }

Vista PaidOutReason : 1. <Button x:Name="Add" Command={Binding AddCommand}/> 2. Establezca el modelo de vista anterior como contexto de datos de la vista PaidOutReason.

Cree una interfaz IPopUpBanks que contenga el método Show () e implemente esta interfaz en la vista PopUpBanks .

1
RAKESH KUMAR SAHU 10 sep. 2018 a las 12:54

Puede usar controles estáticos en su aplicación. Comience declarando un objeto de ventana estática en App.xaml.cs, por ejemplo

public static PaidOutReason paidOutWindow;

Luego, en el método del constructor de aplicaciones, después de InitializingComponent () , inicialice la clase de ventana estática:

paidOutWindow = new PaidOutReason();

Quizás te preguntes qué te da. Dado que es una aplicación POS, es probable que use el mismo conjunto de ventanas con bastante frecuencia y repetidamente, lo que significa que puede mantener el objeto de la ventana en la memoria y consultarlo (y cambiarlo, cuando sea necesario). Además, después de hacer eso, tendrá acceso a todas las estructuras dentro del objeto PaidOutReason , escribiendo

App.paidOutWindow.FunctionName();

Y, por último, debe tener acceso a todas las funciones de la ventana, como ShowDialog () .

1
Vanghern 10 sep. 2018 a las 08:25