Я использую MVVM, и пользовательские объекты ICommand предоставляются слоем ViewModel.Один объект ViewModel одновременно может быть присоединен через свойство DataContext ко многим объектам View (окнам, страницам и т. Д.).В ICommand.CanExecute () я хочу проверить отсутствие ошибок проверки для некоторых элементов управления в View (которые прикреплены к реквизитам ViewModel, существенным для конкретной команды VM).Одна ViewModel может предоставить много команд, каждая из которых имеет собственный набор элементов управления для проверки правильности ошибок.Итак, псевдо-XAML:
<Button.CommandParameter>
<x:Array Type="sys_win:DependencyObject">
<sys_win:DependencyObject>
<reference_to_textbox_or_other_control/>
</sys_win:DependencyObject>
<sys_win:DependencyObject>
<reference_to_textbox_or_other_control/>
</sys_win:DependencyObject>
</x:Array>
</Button.CommandParameter>
Вторая проблема заключается в том, что конкретная команда может быть вызвана элементом управления, который сам является частью DataTemplate для элемента коллекции (в моем случае - частью данных ListBoxItemшаблон).Мой шаблонный элемент списка имеет два текстовых поля (привязанных к двум подпоркам соответствующего ViewModel) и кнопку, которая вызывает команду ViewModel.Итак, в команде CanExecute () мне нужно проверить ошибки валидации для некоторых элементов управления окнами и двух текстовых полей, которые принадлежат этому элементу списка, а не другим элементам.Приведенный ниже код работает нормально, если я хочу передать свойство ListBoxItem.IsSelected в виде CommandParameter:
<Button DataContext="{Binding}"
Command="{Binding Path=SwitchCommand}"
CommandParameter="{Binding Path=IsSelected, RelativeSource={
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}}}"/>
Но как я могу передать весь (DependencyObject) ListBoxItem в качестве CommandParameter?И как этот ListBoxItem, переданный через {Binding RelativeSource}, может быть смешан с другими текущими элементами управления окна в первом примере кода?
Мне очень жаль, но как я могу добавить ссылки на элементы управления вxaml?
<Button.CommandParameter>
<x:Array Type="sys_win:DependencyObject">
<sys_win:DependencyObject>
<reference_to_textbox_or_other_control/>
</sys_win:DependencyObject>
<sys_win:DependencyObject>
<reference_to_textbox_or_other_control/>
</sys_win:DependencyObject>
</x:Array>
</Button.CommandParameter>