Привязать к событию CheckBox Click с помощью в WPF MVVM - PullRequest
0 голосов
/ 30 апреля 2020

Я пишу приложение WPF, используя Caliburn.Micro. Я хочу обновить список имен на основе отмеченных элементов в списке с помощью флажков.

XAML:

<ListBox ItemsSource="{Binding Names}">
    <ListBox.ItemTemplate>
        <HierarchicalDataTemplate>
            <CheckBox Content="{Binding Value}" IsChecked="{Binding IsChecked}" />
        </HierarchicalDataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Привязка IsChecked работает, поэтому я мог запустить метод, чтобы проверить, какие элементы были проверил и обновил список имен. Мой первый подход состоял в том, чтобы привязать команду к событию Click флажка или Checked / Unchecked, но я не могу заставить его работать ...

<CheckBox Content="{Binding Value}" IsChecked="{Binding IsChecked}" Click="{Binding UpdateNameList}" />

В моей ViewModel:

public void UpdateNameList()
{
    // update list...
}

Я получаю эту ошибку во время выполнения:

error Unable to cast object of type 'System.Reflection.RuntimeEventInfo' to type 'System.Reflection.MethodInfo'.

Как связать событие щелчка флажком с Caliburn.Micro? Или я должен сделать это по-другому?

Спасибо

1 Ответ

1 голос
/ 30 апреля 2020

Свяжите Action.Target с моделью родительского представления, используя присоединенное свойство Action.TargetWithoutContext, и используйте Message.Attach для подключения метода. Это должно работать:

<CheckBox Content="{Binding Value}" IsChecked="{Binding IsChecked}"
        cal:Action.TargetWithoutContext="{Binding DataContext, RelativeSource={RelativeSource AncestorType=ListBox}}"
        cal:Message.Attach="UpdateNameList()" />
...