So binden Sie CommandParameter und rufen die ausgewählte Zeilen-ID in radgridview ab

Ich möchte Zeile mit angeklickt Schaltfläche in meiner Tabelle ändern.

Es ist mein Code:

Modell ansehen:

        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:

   
                    
                        
                        
                        
                        
                        
                        
                        
                        

                        
                        
                        
                        
                
                   
                       
                            
                       
                   
                


            
                

Wenn ich auf die Schaltfläche in der ausgewählten Zeile klicke, möchte ich das Feld "Status" in diesem Datensatz ändern. Meine einzige Idee, ausgewählte Zeile zu bekommen, ist CommandParameter. Wie kann ich so etwas umsetzen? Wie schreibe ich "Wydaj ()" -Funktion in VM?

0

2 Antworten

Zunächst einmal nimmt die ICommand.ExecuteCommand -Methode normalerweise einen Objektparameter, sodass ihre Implementierung so aussehen sollte:

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

(Die meisten Implementierungen von ICommand , einschließlich Teleriks DelegateCommand , ermöglichen es Ihnen, dies direkt im Konstruktor zu übergeben, wie Sie es haben: _wydajCommand = new DelegateCommand (Wydaj) ; )

Als nächstes aktualisieren Sie den CommandParameter , binden Sie ihn an die Zeilendaten:


0
hinzugefügt

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;
    }
}

und die Execute-Handler-Funktion kann sein

private void Wydaj(String parameter)
0
hinzugefügt
Es funktioniert gut, groß thx;)
hinzugefügt der Autor user3045261, Quelle
Ah gut! Ich wollte gerade sagen, dass McGarnagle eine bessere Antwort zu haben schien, weil ich den Telerik DelegateCommand nicht kannte. Wenn das aber funktioniert, dann sagte 'nuff.
hinzugefügt der Autor Tony Pulokas, Quelle