我在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?这让我很生气 - 我显然做了一件非常简单的错事......
非常感谢。
答案 0 :(得分:2)
真是个白痴......抱歉浪费你的时间。
我忘记让MyCommand成为一个属性!太盯着屏幕了。 它只是一个公共领域,因此绑定基础设施无法看到它。 一切都很好。