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.

Vincula en WPF como parámetro de comando el valor de una variable local en el código trasero.

Estoy creando dinámicamente botones a medida que avanza el programa. Su cantidad está cambiando.

También asigno un comando para cada botón que creo.

¿Existe alguna forma de pasar una variable local como parámetro al evento ejecutable?

Si quiero pasar “key”, ¿qué debo especificar en “SetBinding(Button.CommandParameterProperty,?)”?

foreach (int key in hotQ)
{
    Button dataButton = new Button
    {
        Content = key.ToString(),
        Width = 128,
    };
    dataButton.SetBinding(Button.CommandProperty, new Binding("RunDialogCommand"));
    dataButton.SetBinding(Button.CommandParameterProperty, ???);
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes pasar una variable local como parámetro al evento ejecutable usando la propiedad Source del objeto Binding para especificar el objeto que contiene la variable local y la propiedad Path para especificar el nombre de la variable.

    Si deseas pasar key, debes especificar lo siguiente en SetBinding(Button.CommandParameterProperty,):

    dataButton.SetBinding(Button.CommandParameterProperty, new Binding("DataContextKey") { Source = key });
    

    Aquí, DataContextKey es el nombre del parámetro que espera el comando y key es la variable local que deseas pasar como valor.

    Alternativamente, puedes usar un objeto anónimo para definir múltiples parámetros:

    dataButton.SetBinding(Button.CommandParameterProperty, new Binding()
    {
        Source = new
        {
            Key = key,
            OtherParam = "some value"
        }
    });
    

    Aquí, Key es el nombre del primer parámetro y OtherParam es el nombre del segundo parámetro. Puedes acceder a estos parámetros en el comando mediante la conversión del objeto parameter al tipo anónimo, de la siguiente manera:

    var anonType = (new { Key = default(int), OtherParam = default(string) })parameter;
    int key = anonType.Key;
    string otherParam = anonType.OtherParam;
    

Comments are closed.