es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C# WPF MVVM 2 vistas de Usercontrols con el mismo contexto de datos y ViewModel.

Tengo 2 vistas de usercontrol, estas son: Bmw.xaml y Audi.xaml.

En ambos archivos xaml añado esto:

<usercontrol x:class="TestProject.Views.Fragments.Audi"></usercontrol><!--El código estándar generado por Visual Studio-->
    xmlns:viewModels="clr-namespace:TestProject.ViewModels"
    <grid>
        <!--CÓDIGO XAML-->
    </grid>

En ambos archivos bmw.caml.cs y audi.xaml.cs tengo esto en mi constructor:

public Audi()
{
    InitializeComponent();
    this.DataContext = new BrandViewModel();
}

Y

public BMW()
{
    InitializeComponent();
    this.DataContext = new BrandViewModel();
}

En el ViewModel están mis funciones, para simplificar cuando el ViewModel es llamado por el Audi quiero llamar a la función ActionAudi() y cuando es llamado por el BMW quiero llamar a ActionBMW().

¿Hay alguna forma de saber en la clase ViewModel a qué usercontrol (audi o bmw) pertenece? Porque dependiendo de esto se debe ejecutar una lógica diferente.

¡Gracias de antemano!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto es pasar un parámetro al constructor del ViewModel que indique si pertenece al UserControl de Audi o BMW. Por ejemplo:

    “` c#
    public class BrandViewModel
    {
    private bool isAudi;

    public BrandViewModel(bool isAudi)
    {
        this.isAudi = isAudi;
    }
    
    public void DoAction()
    {
        if (isAudi)
        {
            ActionAudi();
        }
        else
        {
            ActionBMW();
        }
    }
    
    private void ActionAudi()
    {
        // Lógica de Audi
    }
    
    private void ActionBMW()
    {
        // Lógica de BMW
    }
    

    }


    Luego, en el código detrás de los UserControls, puedes pasar el parámetro correspondiente al ViewModel: ``` c# public Audi() { InitializeComponent(); this.DataContext = new BrandViewModel(true); } public BMW() { InitializeComponent(); this.DataContext = new BrandViewModel(false); }

    De esta manera, el ViewModel sabe si pertenece al UserControl de Audi o BMW y puede ejecutar la lógica correspondiente en sus métodos.

Comments are closed.