为什么我不能绑定我的Silverlight Button Click to Prism DelegateCommand

时间:2010-02-24 14:56:29

标签: silverlight prism icommand delegatecommand

我在Silverlight 3和Prism中有一个简单的测试应用程序,我只想尝试绑定按钮单击我在视图模型上创建的简单命令。 这是一个测试应用程序,只是为了让命令工作。 当我运行它时,我收到一个绑定错误,告诉我该视图找不到命令:

  

System.Windows.Data错误:BindingExpression路径错误:'Bind1.ShellViewModel''找不到'MyCommand'属性''Bind1.ShellViewModel'(HashCode = 8628710)。 BindingExpression:Path ='MyCommand'DataItem ='Bind1.ShellViewModel'(HashCode = 8628710); target元素是'System.Windows.Controls.Button'(Name =''); target属性是'Command'(类型'System.Windows.Input.ICommand')..

这是我的Shell视图:

<UserControl 
x:Class="Bind1.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:Commands="clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation" 
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
    <StackPanel>
        <TextBlock Text="Hello World!"></TextBlock>
        <Button Content="{Binding ButtonLabel}" Commands:Click.Command="{Binding Path=MyCommand}" />
    </StackPanel>
</Grid>
</UserControl>

在视图的构造函数中,我实例化一个ViewModel(我并不担心使用容器......):

public partial class ShellView : UserControl
{
    public ShellView()
    {
        InitializeComponent();
        DataContext = new ShellViewModel();
    }
}

这是我的ViewModel:

public class ShellViewModel
{
    public string ButtonLabel { get { return "DoIt!!"; } }
    public DelegateCommand<object> MyCommand = new DelegateCommand<object>(ExecuteMyCommand);
    public static void ExecuteMyCommand(object obj)
    {
        Debug.WriteLine("Doit executed");
    }
}

按钮标签绑定工作正常,因此视图正在查找ViewModel。

为什么找不到MyCommand?这让我很生气 - 我显然做了一件非常简单的错事......

非常感谢。

1 个答案:

答案 0 :(得分:2)

真是个白痴......抱歉浪费你的时间。

我忘记让MyCommand成为一个属性!太盯着屏幕了。 它只是一个公共领域,因此绑定基础设施无法看到它。 一切都很好。