none
Manipular un control de la MainWindow desde una Page.xaml RRS feed

  • Pregunta

  • Qué tal amigos, sucede que tengo una MainWindow con un Frame donde navego entre Pages.xaml. Una de ellas es un Login, entonces, antes de loggearme mi menú para navegar (que es un listview) está deshabilitado para que al loggearme correctamente, éste se habilite (lvMenu.IsEnabled = true).

    La pregunta es ¿cómo se puede manipular desde esta página a un control de la MainWindow?

    Intenté hacer una función pública que cambie su estado a InEnabled = true:

    MainWindow mn = new MainWindow ();

    mn.habilitarMenu();

    Pero no hace nada, incluso al cerrar la ventana la aplicación no termina porque se queda abierta en alguna parte esa new MainWindow.

    ¿Alguna sugerencia?

    lunes, 4 de junio de 2018 21:26

Todas las respuestas

  • hola

    no puede manipularlo directo, recomiendo que comuniques con eventos desde el codigo del page al del main para que este ultimo aplique el cambio

    por lo general si usas algun patron como ser MVVM tienemetodos como ser publish\subscriber para lanzar accions entre viewmodels

    Para acceder desde el page necesitas la instancia del main, no aplica que realices un "new"

    How can I access control of parent window from child page in WPF?

    no me termina de convencer lo que se plantea en a respuesta, pero lo veo lo mas simples, en ese caso "w" es el nombre de la clase de main

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 5 de junio de 2018 2:33
  • Puedes controlar con una bandera (variable), las variables Application.Current.Resources estan disponibles en cualquier parte del proceso, Ej:

    En Load de MainWindow pon

    Application.Current.Resources("proceso") = "1"

    luego cuando te logueas puedes cambiar a 

    Application.Current.Resources("proceso") = "2"

    de tal manera que siempre valides antes de poner lvMenu.IsEnabled = true que tu proceso sea "2"

    el dato de la variable lo rescatas exactamente igual

    proceso = Application.Current.Resources("proceso")

    Espero te haya ayudado en algo, si es asi, arca como respuesta.

    Saludos

    martes, 5 de junio de 2018 16:18