Ich möchte den aktuellen Fokus an den bindenDatenkontext. Mein Menüsystem verfügt über ein Ansichtsmodell, das eine Liste von ButtonViewModels als Datenkontext enthält. Wie würde ich vorgehen, wenn die fokussierte Schaltfläche vom Datenkontext bestimmt würde?
Es gibt einen FocusManager.FocusedElement, aber dieser Verweis auf ein Steuerelement und die Idee eines ViewModel ist nicht von der Implementierung des View abhängig ...
Antworten:
3 für die Antwort № 1Ich habe versucht, einen DataTrigger im zu platzieren Button
Stil, der an eine Eigenschaft namens bindet IsFocused
in dem ButtonViewModel
und im Setter Bind FocusManager.FocusedElement
auf die Schaltfläche, auf der IsFocused auf true gesetzt ist. Dies sollte es Ihnen ermöglichen, den Fokus direkt von der zu steuern ButtonViewModel
<ItemsControl ItemsSource="{Binding ButtonViewModels}">
<ItemsControl.Resources>
<Style x:Key="FocusBindingStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused}" Value="True">
<Setter Property="FocusManager.FocusedElement"
Value="{Binding RelativeSource={RelativeSource Self}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.Resources>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="Test" Style="{StaticResource FocusBindingStyle}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>