Команда относительного связывания с silverlight WP7 - PullRequest
0 голосов
/ 28 июня 2011

У меня ошибка при привязке моей команды к кнопке в ItemsControl.

Это мой код:

<phone:PhoneApplicationPage.DataContext>
    <ViewModel:MyViewModel />
</phone:PhoneApplicationPage.DataContext>

с:

<ItemsControl ItemsSource="{Binding MyList}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="Test" 
                cmd:ButtonBaseExtensions.Command="{Binding MyViewModel.TestCommand}" 
                cmd:ButtonBaseExtensions.CommandParameter="{Binding}"/>
    </ItemsControl.ItemTemplate>
</ItemsControl>

ИЯ получаю:

System.Windows.Data Error: BindingExpression path error: 'MyViewModel' property not found on '...' '...' (HashCode=77119633). BindingExpression: Path='MyViewModel.ChooseCommand' DataItem='...' (HashCode=77119633); target element is 'System.Windows.Controls.Button' (Name=''); target property is 'Command' (type 'System.Windows.Input.ICommand')..

Конечно, я должен использовать абсолютную или относительную привязку, но я не знаю, как это сделать.

Заранее благодарен за любую помощь

1 Ответ

1 голос
/ 28 июня 2011

Ваш Button находится в пределах ItemsControl, который связан с вашим MyList свойством, которое, как я предполагаю, является списком или каким-то IEnumerable типом.DataContext каждого Button будет элементом в MyList, который он представляет.

Вы правы, что для привязки кнопок к вашей модели представления верхнего уровня вам потребуется какой-то относительныйпривязка источника, которую Silverlight (3) не поддерживает.

Я создал относительную замену привязки источника для Silverlight здесь:

http://www.scottlogic.co.uk/blog/colin/2009/02/relativesource-binding-in-silverlight/

Однако для WP7, гдепроизводительность действительно имеет значение, я бы ее не использовал!

Почему бы просто не создать необходимые отношения в вашей модели представления?то есть для каждого элемента в MyList (назовем их MyListItem), предоставьте свойство, которое указывает на родительское представление Model.Другими словами, имейте свойство MyListItem.Parent, которое указывает на MyViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...