按钮点击和命令优先级

5
<Button Height="40" Width="40" x:Name="btnup" Command="{Binding UpCommand}" CommandParameter="{Binding ElementName=dgEntities,Path=SelectedItem}" Click="Btnup_OnClick">

这段代码存在的问题是,在OnClick之后才执行Command命令。有没有可能先执行Command命令再执行OnClick操作呢?请帮忙解决。
1个回答

10
不,WPF在调用绑定命令的Execute之前会评估OnClick。根据单击处理程序执行的操作,您可以改为在Execute中调用它,或者向视图模型引发事件,然后再向视图引发事件,最终执行该代码的操作。
类似以下代码:

Code-Behind:

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

谢谢 Bradley。请查看此链接:http://www.morkeleb.com/2009/08/18/wpf-command-execution-and-click-event-execution-on-buttons/ 在这种情况下,我需要让我的ViewModel实现ObservableCommand还是MainWindow.cs实现?如果ViewModel实现,我如何在ViewModel中访问UI元素? - nikhil
命令通常放在ViewModel中;但是您可以让ViewModel引发事件,以避免对View的“直接”了解。然后,视图将对该事件做出反应,就像按钮已被按下一样。 - BradleyDotNET
嘿,Bradley,你能帮我一下吗? private void MoveUp(object obj){ } 在ViewModel的MoveUp命令中如何调用ButtonOn Click委托?请写一个示例代码。 - nikhil
Bradley,我看不到代码,请重新发布一下,可以吗? - nikhil
@nikhil 嗯,可以看到代码...也许你应该清除一下缓存?如果问题仍然存在;也许你应该在元站点发布一个错误报告。 - BradleyDotNET
感谢 Bradley,我现在能看到了。 - nikhil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接