Ich habe in einem UserControl einen RadioButton (Style=ToggleButton). Um die View (bzw. das ViewModel) über den Checked-Status zu informieren, habe ich ein RoutedEvent bereitgestellt (CheckedChangedEvent), welches im Checked-Eventhandler des RadioButtons ausgelöst wird:
private void rdBtn_Checked(object sender, RoutedEventArgs e) {
RoutedPropertyChangedEventArgs<bool> args =
new RoutedPropertyChangedEventArgs<bool>(false, true);
args.RoutedEvent = CheckedChangedEvent;
RaiseEvent(args);
}
Im Code-Behind der MainView, welches das UserControl beinhaltet, rufe ich dann im CheckedChangedEventHandler eine entsprechende Funktion im MainViewModel auf.
Das funktioniert soweit so gut.
Nun habe ich dem UserControl (genauer gesagt dem RadioButton) auch die Möglich eines Commands verpasst:
<RadioButton Name="rdBtn"
Command="{Binding SomeCommand, ElementName=rootControl}" CommandParameter="{Binding ElementName=rootControl, Path=Name}" Style="{StaticResource {x:Type ToggleButton}}" GroupName="{Binding ElementName=rootControl,Path=GroupName}" Checked="rdBtn_Checked">
</RadioButton>
Weise ich in der MainView dem UserControl nun ein eigenes Command zu:
<local:MyUC Name="dummy" SomeCommand="{Binding BtnCommand}" />
dann wird dieses Command bei jedem Click auf den Button ausgeführt, auch wenn dieser bereits 'Checked' ist.
Hinsichtlich MVVM:
Ist es hier sinnvoller, die Variante mit dem RoutedEvent zu nehmen oder lässt sich die Variante mit dem ICommand so modifizieren, dass das Command nur bei IsChecked=False exekutiert wird ?
Hallo snupi,
also ich würde da
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked" >
<commands:EventToCommand Command="{Binding CheckedToCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
aus dem MVVM Light Toolkit nehmen
MFG Uwe
ich würd glaub eine bool Property des Viewmodels an die IsChecked-Property binden
Der frühe Apfel fängt den Wurm.
@uwalter: MVVM Light Toolkit muss ich mir mal genauer anschauen - danke für den tip.
@ErfinderDesRades: die IsChecked-Property des RadioButtons muss ich aber dann halt nochmals im UserControl abbilden (um sie von aussen zugänglich zu machen)
@ErfinderDesRades: die IsChecked-Property des RadioButtons muss ich aber dann halt nochmals im UserControl abbilden (um sie von aussen zugänglich zu machen) nö. einfach im Xaml Radiobutton.IsChecked an die dafür vorzusehende Viewmodel-Property binden.
wüsste nix von "abbilden und zugänglich machen"
Der frühe Apfel fängt den Wurm.