如何绑定 Clicked 事件和 Command,使 Command 优先执行?

Posted

技术标签:

【中文标题】如何绑定 Clicked 事件和 Command,使 Command 优先执行?【英文标题】:How to bind both Clicked event and a Command, so the Command will be executed first? 【发布时间】:2016-05-30 06:35:21 【问题描述】:

我的目标是执行一些业务逻辑,然后导航到其他页面。 此外,我想将业务逻辑与导航分开,因为我认为根据 MVVM 模式,不应将此过程委托给 ModelView 逻辑。如果我错了,请纠正我。 为了实现这一点,我在 ViewModel 中为业务逻辑创建了一个命令:

SubmitOrderCommand = new DelegateCommand<string>(SubmitOrderExecute, SubmitOrderCanExecute);
...    
private void SubmitOrderExecute(string obj)
            
                var rnd = new Random();
                int tableIndex = rnd.Next((int)base.Repository.Tables.Count());

                base.Repository.Orders.Add(
                    new Order()
                    
                        Complete = false,
                        Expedite = true,
                        SpecialRequests = SpecialRequestText,
                        ...
                        Items = CurrentlySelectedMenuItems.ToList<MenuItem>()
                    );
                this.CurrentlySelectedMenuItems.Clear();
                //TODO:Have to navigate to other page  after doing all these stuff
            

这是明显的 XAML 部分,没什么特别的

<Button Content="Submit Order" Command="Binding SubmitOrderCommand" />

问题是,在我的命令执行后如何导航到其他页面并严格遵循 MVVM 模式。我知道我可以使用 EventTrigger,但如果存在其他解决方案,请寻找...

【问题讨论】:

【参考方案1】:

添加服务以在需要时导航到其他页面。 如果您使用服务,它不会破坏 MVVM 模式。

如果您有 plusalsight 帐户,我向您推荐这门课程: https://app.pluralsight.com/player?course=practical-mvvm&author=gill-cleeren&name=practical-mvvm-m4&clip=0&mode=live

【讨论】:

谢谢,太棒了!将为此购买 Pluralsight 帐户。

以上是关于如何绑定 Clicked 事件和 Command,使 Command 优先执行?的主要内容,如果未能解决你的问题,请参考以下文章

管窥MVVMLight Command参数绑定和事件传递

WPF 菜单事件绑定 DataTemplate下button Command事件绑定 DataTemplate遍历实体数据

WPF中的Command事件绑定

Tkinter中的多个键事件绑定 - “Control + E”“Command(apple)+ E”等

wpf中mvvm的Command绑定后,如何在点击按钮的时候在viewmodel里面异步执行方法。

WPF 事件实现MVVM中的Command绑定