Передача данных в ViewModel с помощью EventToCommand, Devexpress - PullRequest
0 голосов
/ 13 мая 2018

Я работаю с элементами управления winform devexpress, и в этот момент я определил событие RowDoubleClick в своем конструкторе представления, как показано ниже:

mvvmContext1.WithEvent<MyViewModel, RowClickEventArgs>(gridView1, "RowClick")
            .EventToCommand(x => x.Show(),
            v => (v.Clicks == 2) && (v.Button == MouseButtons.Left));

Метод show в соответствующей viewModel выглядит следующим образом:

public void Show()
{
    messageBoxService.ShowMessage("Row Clicked");
}

Когда я дважды щелкаю по строке, появляется окно сообщения и печатается «Row Clicked», но я хочу получить данные строки (тип учащегося) и в этом методе show.

Как я могу это сделать?

1 Ответ

0 голосов
/ 14 мая 2018

Взгляните на Table (CollectionView) demo. Я предлагаю вам разделить привязку на две части - привязать строку Focused к свойству ViewModel. И затем, привязка действия двойного щелчка к команде Show:

var fluentAPI = mvvmContext.OfType<MyViewModel>();
// Synchronize the ViewModel.SelectedEntity and the GridView.FocusedRowRandle in two-way manner
fluentAPI.WithEvent<ColumnView, FocusedRowObjectChangedEventArgs>(gridView, "FocusedRowObjectChanged")
    .SetBinding(x => x.SelectedEntity,
        args => args.Row as Student,
            (gView, entity) => gView.FocusedRowHandle = gView.FindRow(entity));
// Proceed the Show command when row double-clicked
fluentAPI.WithEvent<RowClickEventArgs>(gridView, "RowClick").EventToCommand(
        x => x.Show(default(Student)),
            x => x.SelectedEntity,
                args => (args.Clicks == 2) && (args.Button == MouseButtons.Left));

ViewModel:

public class MyViewModel{
    public virtual Student SelectedEntity { 
        get;
        set;
    }
    protected void OnSelectedEntityChanged(){
        this.RaiseCanExacuteChanged(x => x.Show(default(Student)));
    }
    public void Show(Student student){
        //...
    }
}
...