Xamarin.Forms (PRISM) - Buzón de verificación Bind, a un comando en viewmodel, out listview itemsource

Sooo, construir un Prism, xamarin. formularios de aplicación.

Tengo un objeto por el nombre de "Herd", con atributos básicos.

Estoy mostrando una lista de estos objetos, y quiero activar un comando que envía el rebaño que se registra en una casilla de verificación a la visora.


                
                    
                        
                            
                                
                                    
                                    
                                
                                
                                    
                                        
                                            
                                        
                                    
                                
                        
                    
                
            

Pero parece que no puedo encontrar la manera correcta de atar al modelo de visualización dentro del elemento de la lista.

¿Puede alguien por favor ayudarme a guiarme a la unión correcta.

¡Gracias por adelantado!

Pregunta hecha hace 3 años, 4 meses, 29 días - Por codeartisan


3 Respuestas:

  • Sobre la unión de un comando a la casilla de verificación, hago una muestra que puedes ver el siguiente código. Si cambia la casilla marcada, pasará el elemento de lista actual.

     
                
                    
                        
                            
                                
                                    
                                    
                                  
                                
                                
                                
    
                                    
                                        
                                    
                                
                              
                            
                        
                    
                
            
    
    public partial class Page34 : ContentPage
    {
        public ObservableCollection HerdsThatsNeedsToBeUpdated { get; set; }
        public ICommand UpdateThisHerdCommand { get; set; }
        public Page34()
        {
            InitializeComponent();
    
            HerdsThatsNeedsToBeUpdated = new ObservableCollection()
            {
                new Herd(){HeaderName="test 1"},
                new Herd(){HeaderName="test 2"},
                new Herd(){HeaderName="test 3"},
                new Herd(){HeaderName="test 4"},
                new Herd(){HeaderName="test 5"},
                new Herd(){HeaderName="test 6"}
    
            };
    
            UpdateThisHerdCommand = new Command(checkboxcommand);
    
            this.BindingContext = this;
        }
    
        private void checkboxcommand(Herd herd)
        {
            Console.WriteLine("the selected item is {0}",herd.HeaderName);
        }
    }
    
    public class Herd
    {
        public string HeaderName { get; set; }
    }
    

    Respondida el Dec 17, 2020 a las 14:53 - por quantumquill

    Votos positivos: 0 | Votos negativos: 0

  • El problema en tu código está en la forma en que intentas establecer el binding del comando en el ViewModel al evento PropertyChanged del checkbox. Para lograr esto, podemos realizar algunos ajustes en el código.

    Aquí tienes una posible solución:

    • Asegúrate de que estás usando la notación correcta en el Binding del evento del checkbox. En lugar de "PropertyChanged", puedes usar un evento diferente, como "CheckedChanged", que es más comúnmente utilizado en Xamarin.Forms para checkboxes.
    • Asegúrate de que el ViewModel que contiene el comando `UpdateThisHerdCommand` esté establecido correctamente como el `BindingContext` para tu vista que contiene el ListView.
    • Ajusta el XAML para vincular el evento Changed del checkbox al comando en tu ViewModel de la siguiente manera:
    xml
    
        
    
    

    En este código, {Binding} se refiere al objeto actual del ListView, y BindingContext.UpdateThisHerdCommand hace referencia al comando en el ViewModel asociado a la vista que contiene el ListView.

    Con estos ajustes, deberías ser capaz de vincular el comando en tu ViewModel al evento Changed del checkbox dentro de tu ListView en Xamarin.Forms utilizando Prism.

    Respondida el Dec 18, 2020 a las 14:53 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para vincular una casilla de verificación a un comando en un modelo de vista en una aplicación Xamarin.Forms (PRISM) con una lista de elementos, utiliza el siguiente código dentro de la plantilla de elemento de la lista:

    <ListView ItemSource="{Binding HerdsThatsNeedsToBeUpdated}" RowHeight="60" x:Name="UpdateHerdList"> <ListView.ItemTemplate> <DataTemplate> <StackLayout> <CheckBox IsChecked="{Binding IsSelected}" Command="{Binding BindingContext.UpdateThisHerdCommand, Source={x:Reference UpdateHerdList}}" CommandParameter="{Binding}"/> <Label Text="{Binding HeaderName}" /> </StackLayout> </DataTemplate> </ListView.ItemTemplate> </ListView>

    Explicación:

    IsChecked: Vincula la propiedad IsChecked de la casilla de verificación a la propiedad IsSelected del elemento de la lista. Command: Vincula el evento Click de la casilla de verificación al comando UpdateThisHerdCommand en el modelo de vista. Source={x:Reference UpdateHerdList}: Hace referencia a la lista de vistas para obtener el contexto de enlace correcto. CommandParameter="{Binding}": Pasa el elemento de la lista actual como parámetro de comando.

    Nota:

    Asegúrate de que la propiedad IsSelected exista en el modelo de vista. No olvides importar el espacio de nombres Prism.Commands y declarar el comando UpdateThisHerdCommand en el modelo de vista.

    Uso:

    Cuando se hace clic en una casilla de verificación, se activará el comando UpdateThisHerdCommand en el modelo de vista, pasando el elemento de la lista seleccionado como parámetro. Puedes implementar la lógica de tu comando en el método Execute del comando UpdateThisHerdCommand.

    Respondida el Dec 18, 2020 a las 15:04 - por Gemini

    Votos positivos: 0 | Votos negativos: 0