SL ItemsControl, команда на ViewModel не запускается из ItemsControl (CheckBox) - PullRequest
0 голосов
/ 21 октября 2010

Я использую PRISM v2, CAL, SL4 и MVVM, и у меня есть команда делегата в моей ViewModel под названием CheckCommand. ItemsControl содержит флажок, и я пытаюсь получить элементы в ItemsControl / Checkbox для запуска этой команды, когда она проверена - но это не связь с моделью представления!

Я думаю, это потому, что каждый datacontext элемента - это отдельный объект, к которому привязан элемент, а не ViewModel?
- Мое подозрение на самом деле верно, потому что, если я переместлю мой DelegateCommand из модели представления в класс, определяющий элементы в itemscontrol, я вижу, что команды / методы запускаются!

Вид:

<ListBox x:Name="BasketListBox" ItemsSource="{Binding BasketCollection}" MinWidth="200">
<ListBox.ItemTemplate>
    <DataTemplate>
        <CheckBox commands:Checked.Command="{Binding CheckCommand}"  IsChecked="False" </CheckBox>
    </DataTemplate>       
</ListBox.ItemTemplate>

Может кто-нибудь указать мне правильное направление, пожалуйста?

Приветствия, Макад.

РЕДАКТИРОВАТЬ 1:

Командование теперь работает, см. Решение ниже. НО, теперь я столкнулся с другой проблемой:
«Произошло исключение при создании региона с именем basketRegion». Исключением было: System.InvalidOperationException: свойство ItemsSource ItemsControl не пустое. Этот элемент управления связан с регионом, но элемент управления уже связан с чем-то другим. явно не устанавливал свойство ItemSource элемента управления, это исключение может быть вызвано изменением значения унаследованного присоединенного свойства RegionManager "

Создан отдельный вопрос для этой проблемы, чтобы сделать его более чистым:

PRISM-MVVM, проблема ItemsControl с представлением представления

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Вы хотите, чтобы каждый CheckBox запускал одну и ту же команду? Вы могли бы:

<CheckBox commands:Checked.Command="{Binding DataContext.CheckCommand, ElementName=BasketListBox}"

Или вы можете сделать так, чтобы каждая дочерняя модель представила команду через свое собственное свойство.

0 голосов
/ 25 октября 2010

Спасибо Кент.Вы поставили меня на правильный путь, чтобы решить это, в конечном итоге сделать это:

<ListBox x:Name="basketListBox" ItemsSource="{Binding basketcollection}" MinWidth="200">
<ListBox.ItemTemplate>
<DataTemplate>
        <CheckBox commands:Checked1.Command="{Binding DataContext.CheckCommand, ElementName=basketListBox}" Content="{Binding basketName}">             </CheckBox>
    </DataTemplate>       
</ListBox.ItemTemplate>

...