У меня есть простое тестовое приложение в Silverlight 3 и Prism, где я просто пытаюсь привязать кнопку. Нажмите на простую команду, которую я создал для модели представления.
Это тестовое приложение только для того, чтобы заставить работать.
Когда я запускаю его, я получаю сообщение об ошибке, сообщающее, что представление не может найти команду:
Ошибка System.Windows.Data: ошибка пути BindingExpression: свойство «MyCommand» не найдено в «Bind1.ShellViewModel», «Bind1.ShellViewModel» (HashCode = 8628710). BindingExpression: Path = 'MyCommand' DataItem = 'Bind1.ShellViewModel' (HashCode = 8628710); Целевым элементом является '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");
}
}
Привязка метки кнопки работает нормально, поэтому представление находит модель View OK.
Почему он не может найти MyCommand? Это сводит меня с ума - я, очевидно, делаю что-то простое очень неправильно ...
Большое спасибо.