Cómo enlazar CommandParameter y obtener la identificación de fila seleccionada en radgridview

Me gustaría modificar la fila con el botón en mi mesa.

Es mi código:

ver modelo:

        public class PrzeszukiwanieBazyViewModel : INotifyPropertyChanged
    {
        private ModelBazyDanych _modelBazy;
        private IList _ewidencjaList;
        private String _test;

        public string Test
        {
            get { return _test; }
            set
            {
                if (value == _test) return;
                _test = value;
                OnPropertyChanged();
            }
        }

        public IList EwidencjaList
        {
            get { return _ewidencjaList; }
            set
            {
                if (Equals(value, _ewidencjaList)) return;
                _ewidencjaList = value;
                OnPropertyChanged();
            }
        }


        public PrzeszukiwanieBazyViewModel(ModelBazyDanych pModelBazyDanych)
        {
            this._modelBazy = pModelBazyDanych;
            LocalizationManager.Manager = new Jezyk();
//            EwidencjaList = ModelBazy.SelectAllFromTable().Where(m => m.Status == 0).ToList();
        }

        public ModelBazyDanych ModelBazy
        {
            get { return _modelBazy; }
            set
            {
                if (Equals(value, _modelBazy)) return;
                _modelBazy = value;
                OnPropertyChanged();
            }
        }

        private DelegateCommand _odswiezanieCommand;
        public ICommand OdswiezanieCommand
        {
            get
            {
                if (_odswiezanieCommand == null)
                    _odswiezanieCommand = new DelegateCommand(Odswiezanie);
                return _odswiezanieCommand;
            }
        }
        private DelegateCommand _wydajCommand;
        public ICommand WydajCommand
        {
            get
            {
                if (_wydajCommand == null)
                    _wydajCommand = new DelegateCommand(Wydaj);
                return _wydajCommand;
            }
        }

        private void Wydaj()
        {
           //HOW TO WRITE THIS ?:>
        }

        private void Odswiezanie()
        {
//            MessageBox.Show(Test);
            EwidencjaList = ModelBazy.SelectAllFromTable().Where(m => m.Status == 0).ToList();
        }

        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

XAML:

   
                    
                        
                        
                        
                        
                        
                        
                        
                        

                        
                        
                        
                        
                
                   
                       
                            
                       
                   
                


            
                

Cuando hago clic en el botón en la fila seleccionada, me gustaría cambiar el campo "Estado" en este registro. Mi única idea para obtener la fila seleccionada es CommandParameter. ¿Cómo puedo implementar algo así? Cómo escribir la función "Wydaj ()" en VM?

0

2 Respuestas

En primer lugar, el método ICommand.ExecuteCommand generalmente toma un parámetro de objeto, por lo que su implementación debería verse así:

private void Wydaj(object parameter)
{
    if (parameter as EwidencjonowanaRzecz != null)
        ((EwidencjonowanaRzecz)parameter).Status = "new status";
}

(La mayoría de las implementaciones de ICommand , incluido el DelegateCommand de Telerik, le permiten pasar esto directamente en el constructor, como lo tiene: _wydajCommand = new DelegateCommand (Wydaj) ; )

A continuación, actualice el CommandParameter , agréguelo a los datos de la fila:


0
agregado

There is a generic version of DelegateCommand. I'm assuming that your CommandParameter is a String, so you can declare it like so

private DelegateCommand _wydajCommand;
public ICommand WydajCommand
{
    get
    {
        if (_wydajCommand == null)
            _wydajCommand = new DelegateCommand(Wydaj);
        return _wydajCommand;
    }
}

y la función de controlador Execute puede ser

private void Wydaj(String parameter)
0
agregado
Funciona bien, gran thx;)
agregado el autor user3045261, fuente
¡Ah bueno! Estaba a punto de decir que McGarnagle parecía tener una mejor respuesta, porque no sabía sobre el Telecik DelegateCommand. Sin embargo, si esto funciona, entonces 'dijo nuff.
agregado el autor Tony Pulokas, fuente