在我的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 它会在页面加载时被点击,但在此之后,我可以单击按钮直到我的鼠标磨损,并且永远不会调用该命令。
为了我的心理健康,我很感激你提供的任何帮助。
由于
米克
答案 0 :(得分:1)
为了隔离问题,请尝试使用您自己的简单ICommand
实现,而不是Telerik的DelegateCommand
。
如果问题仍然存在,您会知道它在您的XAML /数据绑定附近,然后我建议您发布更完整的代码部分,以便此处有人可以帮助您。
如果问题消失,你会发现Telerik DelegateCommand
决定不再召唤你的lambda。
如果您可以发布更完整的问题再现,它也可能有所帮助。因为您只发布了代码的一小部分,并且可能从这里找不到问题的原因......
答案 1 :(得分:1)
TestCommand
的get访问器仅被调用一次 - 当绑定引擎将Command
的{{1}}绑定到Button
属性时。将断点放在get的第一行,应该预计它只会被击中一次。
您需要做的是将断点放在命令运行时执行的代码上。在您的原始示例中,这意味着在委托中内部 - 即在TestCommand
上。
编辑:您可以使用return true
强制调试器中断代码:
System.Diagnostics.Debugger.Break()