Estoy usando MVVM y la capa ViewModel proporciona objetos ICommand personalizados. Un objeto ViewModel al mismo tiempo se puede conectar a través de la propiedad DataContext a muchos objetos de visualización (ventanas, páginas, etc.). En ICommand.CanExecute(), deseo verificar la ausencia de errores de validación para algunos controles en la Vista (que se adjunta a las características de ViewModel, significativas para un comando VM particular). Un ViewModel puede proporcionar muchos comandos, cada uno de ellos tiene su propio conjunto de controles para la verificación de validación de errores. Por lo tanto, la pseudo-XAML es:WPF: ¿Cómo pasar Control completo como parámetro de comando a través de 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>
El segundo problema es que el comando en particular puede ser invocada por el control, que a su vez es la parte de la DataTemplate de elemento de la colección (en mi caso - parte de la plantilla de datos ListBoxItem) . Mi elemento de cuadro de lista con plantilla tiene dos cuadros de texto (vinculados a dos apoyos de ViewModel correspondiente) y un botón, que invocan el comando ViewModel. Por lo tanto, al comando CanExecute() necesito verificar si hay errores de validación para algunos controles de ventana & dos cuadros de texto, que pertenecen a este elemento de lista, no a otros elementos. El código siguiente funciona bien si quiero pasar a la propiedad ListBoxItem.IsSelected como CommandParameter:
<Button DataContext="{Binding}"
Command="{Binding Path=SwitchCommand}"
CommandParameter="{Binding Path=IsSelected, RelativeSource={
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}}}"/>
Pero, ¿cómo puedo pasar toda (DependencyObject) ListBoxItem como el CommandParameter? ¿Y cómo este ListBoxItem, pasado a través de {Binding RelativeSource} se puede mezclar con otros controles de ventana actuales en el primer ejemplo de código?
Lo siento mucho, pero ¿cómo puedo agregar las referencias a los controles en 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>
StackOverflow no es un foro; si necesita agregar más detalles, por favor [edite su pregunta] (http://stackoverflow.com/posts/3482343/edit). Se supone que las respuestas son respuestas, no información adicional sobre la pregunta. – Will