【问题标题】:Pass Data To ViewModel with EventToCommand, Devexpress使用 EventToCommand、Devexpress 将数据传递给 ViewModel
【发布时间】:2018-05-13 15:28:51
【问题描述】:

我正在使用 devexpress winform 控件,此时我已在视图构造函数中定义了 RowDoubleClick 事件,如下所示:

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

对应viewModel中的show方法如下:

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

当我双击该行时,会出现消息框并打印“Row Clicked”,但我也想在此显示方法中获取行数据(学生类型)。

我该怎么做?

【问题讨论】:

    标签: devexpress eventtocommand


    【解决方案1】:

    看看Table (CollectionView) 演示。我建议您将绑定拆分为两部分 - 将 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));
    

    视图模型:

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

    【讨论】:

    • 我已经按照您的方式完成了所有操作,但是 Visual Studio 的 SelectedEntity 存在问题(在您的代码中 - {SetBinding(x => x.SelectedEntity})。错误是:'ColumnView' 没有包含“SelectedEntity”的定义,并且找不到接受“ColumnView”类型的第一个参数的扩展方法“SelectedEntity”(您是否缺少 using 指令或程序集引用?)
    猜你喜欢
    • 2018-09-04
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2015-01-20
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多