Почему я не могу привязать свой щелчок кнопки Silverlight к Prism DelegateCommand - PullRequest
2 голосов
/ 24 февраля 2010

У меня есть простое тестовое приложение в 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? Это сводит меня с ума - я, очевидно, делаю что-то простое очень неправильно ...

Большое спасибо.

1 Ответ

2 голосов
/ 24 февраля 2010

Какой идиот ... Извините, что потратил ваше время.

Я забыл сделать MyCommand свойством !!!Слишком много пялишься на экран.Это было просто публичное поле, поэтому связывающая инфраструктура его не видела.Теперь все хорошо.

...