Używam MVVM, a niestandardowe obiekty ICommand są dostarczane przez warstwę ViewModel. Jeden obiekt ViewModel w tym samym czasie można dołączyć za pośrednictwem właściwości DataContext do wielu obiektów View (okna, strony itp.). W ICommand.CanExecute() Chcę sprawdzić brak błędów sprawdzania poprawności dla niektórych formantów w widoku (które dołączone do rekwizytów ViewModel, istotne dla konkretnej komendy VM). Jeden ViewModel może dostarczyć wiele poleceń, każdy z nich ma własny zestaw kontrolek do sprawdzania poprawności błędów. Tak, pseudo-XAML jest:WPF: Jak przekazać całą kontrolę jako CommandParameter za pośrednictwem 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>
Drugim problemem jest to, że dana komenda może być wywołana przez kontrolę, która sama jest częścią DataTemplate dla elementu kolekcji (w moim przypadku - część ListBoxItem szablonu danych) . Mój szablonowy element listbox ma dwa pola tekstowe (powiązane z dwoma rekwizytami odpowiedniego ViewModelu) i przycisk, który wywołuje polecenie ViewModel. Tak więc, w poleceniu CanExecute() muszę sprawdzić błędy sprawdzania poprawności dla niektórych okien kontrolnych & dwa pola tekstowe, które należą do tego listitem, a nie inne elementy. Poniższy kod działa poprawnie, jeśli chcę przejść ListBoxItem.IsSelected nieruchomości jako CommandParameter:
<Button DataContext="{Binding}"
Command="{Binding Path=SwitchCommand}"
CommandParameter="{Binding Path=IsSelected, RelativeSource={
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}}}"/>
Ale jak mogę przekazać całość (DependencyObject) ListBoxItem jak CommandParameter? I w jaki sposób ten ListBoxItem, przekazywany za pośrednictwem {Binding RelativeSource} może być mieszany z innymi bieżącymi kontrolkami okna w pierwszym przykładzie kodu?
Bardzo mi przykro, ale jak dodać odniesienia do elementów sterujących w 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 nie jest forum; jeśli chcesz dodać więcej szczegółów, [edytuj swoje pytanie] (http://stackoverflow.com/posts/3482343/edit). Odpowiedzi mają być odpowiedziami, a nie dodatkowymi informacjami na temat pytania. – Will