gpt4 book ai didi

c# - 命令未在按钮单击时触发

转载 作者:行者123 更新时间:2023-12-03 10:24:14 25 4
gpt4 key购买 nike

在我的 SL4 应用程序中,我试图从按钮触发命令。命令代码是我在其他地方毫无问题地使用过的标准代码,但是当我单击按钮时,我无法调用要调用的命令。

这让我很兴奋,所以我最终创建了一个测试页面,上面只有一个按钮。页面的数据上下文设置为我的 ViewModel,并且 ViewModel 上有一个 ICommand 属性。 DataContext 正在工作,因为我可以将文本框绑定(bind)到 ViewModel 中的字符串属性。它是如此基本,我可以在此处包含所有相关内容:

来自 XAML:

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

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

从 View 模型:
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 = 新的 DelegateCommand
它在页面加载时被击中,但在那之后,我可以单击按钮直到我的鼠标用完,并且永远不会调用该命令。

为了我的心理健康,我将不胜感激提供的任何帮助。

谢谢

米克

最佳答案

TestCommand 的 get 访问器仅调用一次 - 当绑定(bind)引擎绑定(bind) CommandButtonTestCommand属性(property)。将断点放在 get 的第一行,应该预计它只会被命中一次。

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

编辑:您也可以使用 System.Diagnostics.Debugger.Break() 强制调试器中断代码。 :

  ICommand _testCommand;
public ICommand TestCommand
{
get
{
_testCommand = new DelegateCommand(
commandParameter =>
{
var testButton = commandParameter as Button;
},
(commandParameter) =>
{
System.Diagnostics.Debugger.Break(); // Force debugger to break
return true;
}
);
return _testCommand;
}
}

关于c# - 命令未在按钮单击时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com