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ómo vincular un ICommand a un botón fuera del DataContext?

Tengo un botón dentro de un DataGrid con un DataContext (KeyValuePair). Quiero implementar un Command en este botón. Pero si uso Command=”{Binding CommandoTest}”, no funciona.

Probé el ICommand en un Grid sin DataContext y funciona bien.

<datagrid datacontext="{Binding PersonList.Keys}">
    <datagrid.columns>
        <datagridtemplatecolumn>
            <datagridtemplatecolumn.celltemplate>
                <datatemplate>
                    <grid>
                        <button command="{Binding CommandoTest}" content="CommandoTest"></button>
                    </grid>
                </datatemplate>
            </datagridtemplatecolumn.celltemplate>
        </datagridtemplatecolumn>
    </datagrid.columns>
</datagrid>

El código del Command:

Public ReadOnly Property CommandoTest As ICommand
    Get
        Return CommandTest_exp
    End Get
End Property

Public Sub CommandTest_exp()
    MessageBox.Show("Test", "Test")
End Sub
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay un par de posibles problemas con el código proporcionado que podrían estar causando que el comando no funcione en el botón dentro del DataGrid. Una posibilidad es que el DataContext del botón no esté configurado correctamente para el KeyValuePair que contiene el comando. Otra posibilidad es que la vinculación del comando no se esté resolviendo correctamente debido a que el DataContext del DataGrid se establece en PersonList.Keys.

    Para implementar correctamente un comando en el botón del DataGrid, se podrían seguir los siguientes pasos:

    1. Agregar una propiedad al KeyValuePair que contiene el comando como su valor. Por ejemplo:
      Public Property TestCommand As ICommand
      
    2. En la expresión de vinculación del botón, configurar el DataContext del botón como el elemento actual en el DataGrid (que es el KeyValuePair), y luego utilizar la propiedad TestCommand para hacer referencia al comando que se ejecutará:
      <button command="{Binding Value.TestCommand}" content="CommandoTest"></button>
      
    3. Modificar la propiedad CommandoTest en el ViewModel para que devuelva la propiedad TestCommand del KeyValuePair:
      Public ReadOnly Property CommandoTest As ICommand
         Get
             Return PersonList.FirstOrDefault().Value.TestCommand
         End Get
      End Property
      

    Al establecer el DataContext del botón como el KeyValuePair que contiene el comando, y hacer referencia a la propiedad TestCommand en la expresión de vinculación, el comando debería ejecutarse correctamente cuando se hace clic en el botón dentro del DataGrid.

Comments are closed.