【发布时间】:2012-01-15 22:40:46
【问题描述】:
在我的 SL4 应用程序中,我试图从按钮触发命令。命令代码是我在其他地方毫无问题地使用过的标准代码,但是当我单击按钮时,我无法调用要调用的命令。
这让我很兴奋,所以我最终创建了一个测试页面,上面只有一个按钮。页面的数据上下文设置为我的 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 = 新的 DelegateCommand 当页面加载时它会被点击,但在那之后,我可以单击按钮直到我的鼠标用完,并且永远不会调用该命令。
为了我的心理健康,如果能提供任何帮助,我将不胜感激。
谢谢
米克
【问题讨论】:
-
Mick,我一般不会自己编写命令,而是使用 GalaSoft.MvvmLight 的 RelayCommands;这是开源的。语法非常简单,除了 RoutedCommand 类之外,您还可以使用 MVVM Light 中的大量工具。这可能有帮助吗?
-
谢谢罗伯特。我有点知道我应该使用其中一个框架,但这意味着要取消一些我现有的代码,而且我到目前为止一直很懒惰。也许现在是咬紧牙关的时候了,但我仍然想知道为什么这不起作用。
-
此外,Caliburn.Micro 是在 WPF 和 Silverlight 中开发 MVVM 应用程序的绝佳框架。
标签: c# silverlight silverlight-4.0 mvvm