按钮单击时不会触发命令

时间:2011-12-08 13:46:10

标签: c# silverlight silverlight-4.0 mvvm

在我的SL4应用程序中,我正试图从按钮触发命令。命令代码是我在其他地方没有问题的标准内容,但是当我点击按钮时我无法调用Command。

这让我很精神,所以我最终创建了一个没有任何内容的测试页面,只有一个按钮。页面的数据上下文设置为我的ViewModel,ViewModel上有一个ICommand属性。 DataContext正在工作,因为我可以将文本框绑定到ViewModel中的字符串属性。它非常基础,我可以在这里包含所有相关内容:

来自XAML:

xmlns:models="clr-namespace:x3.ViewModels"

...

<UserControl.DataContext>
<models:TestViewModel/>
</UserControl.DataContext>
<Button x:Name="TestButton" Command="{Binding TestCommand}" Content="AAAAGHH" />

来自ViewModel:

public class TestViewModel:INotifyPropertyChanged
{
  ICommand _testCommand;
  public ICommand TestCommand
  {
    get
    {
      _testCommand = new DelegateCommand(
        commandParameter =>
        {
          var testButton = commandParameter as Button;
        },
        (commandParameter) => {return true;});
      return _testCommand;
    }
  }
}

DelegateCommand是Telerik.Windows.Controls的一部分。如果我把断点放在     _testCommand = new DelegateCommand 它会在页面加载时被点击,但在此之后,我可以单击按钮直到我的鼠标磨损,并且永远不会调用该命令。

为了我的心理健康,我很感激你提供的任何帮助。

由于

米克

2 个答案:

答案 0 :(得分:1)

为了隔离问题,请尝试使用您自己的简单ICommand实现,而不是Telerik的DelegateCommand

如果问题仍然存在,您会知道它在您的XAML /数据绑定附近,然后我建议您发布更完整的代码部分,以便此处有人可以帮助您。

如果问题消失,你会发现Telerik DelegateCommand决定不再召唤你的lambda。

如果您可以发布更完整的问题再现,它也可能有所帮助。因为您只发布了代码的一小部分,并且可能从这里找不到问题的原因......

答案 1 :(得分:1)

TestCommand的get访问器仅被调用一次 - 当绑定引擎将Command的{​​{1}}绑定到Button属性时。将断点放在get的第一行,应该预计它只会被击中一次。

您需要做的是将断点放在命令运行时执行的代码上。在您的原始示例中,这意味着在委托中内部 - 即在TestCommand上。

编辑:您可以使用return true强制调试器中断代码:

System.Diagnostics.Debugger.Break()