【问题标题】:Button Click and Command Precedence按钮单击和命令优先级
【发布时间】:2015-01-15 01:08:39
【问题描述】:
<Button Height="40" Width="40" x:Name="btnup" Command="{Binding UpCommand}" CommandParameter="{Binding ElementName=dgEntities,Path=SelectedItem}" Click="Btnup_OnClick">

这段代码发生的事情是,命令在 OnClick 之后执行。是否可以先执行 Command 再执行 OnClick。请帮忙....

【问题讨论】:

    标签: wpf mvvm prism


    【解决方案1】:

    不,WPF 在对绑定命令调用 Execute 之前评估 OnClick

    取决于点击处理程序的作用;您可以改为从Execute 调用它,或者将事件返回给视图模型,然后视图模型将事件返回给视图,然后视图执行代码。

    类似:

    代码隐藏:

      public SomeViewClass
      {
         public SomeViewClass()
         {
             InitializeComponent();
    
             SomeViewModel viewModel = new SomeViewModel;
             DataContext = viewModel;
             viewModel.SomeCommandCompleted += MoveUp;
         }
    
         private void MoveUp()
         {
             ...
         }
      }
    

    查看模型

    public class SomeViewModel
    {
        public event Action SomeCommandCompleted;
        public ICommand SomeCommand {get; private set;}
    
        public SomeViewModel()
        {
            SomeCommand = new DelegateCommand((o) => 
            {
                ...
                if (SomeCommandCompleted != null)
                    SomeCommandCompleted();
            }
        }
    }
    

    【讨论】:

    • 谢谢布拉德利.. 请看看这个链接。 morkeleb.com/2009/08/18/… 在这种情况下,我是否让我的 ViewModel 实现 ObservableCommand 或 MainWindow.cs。如果 ViewModel 有,我如何访问 ViewModel 中的 UI 元素。
    • 命令通常放在 ViewModel 中;但是您可以让 ViewModel 引发一个事件,以避免“直接”了解 View。然后视图会对事件做出反应,就好像按钮被按下一样。
    • 嘿,布拉德利,你能帮我解决这个私有的 void MoveUp(object obj){ } 如何在 ViewModel 的 MoveUp 命令中调用 ButtonOn Click Delegate。请写一个示例代码。
    • Bradley 我看不到代码。能否请您重新发布。
    • @nikhil 好吧 可以看到代码...也许清除您的缓存?如果问题仍然存在;也许你应该在 meta 上发布一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多