WPF ComboBox - ViewModel Binding

Dey

Banned
Registriert
Mai 2005
Beiträge
1.925
Hi.

Ich habe eine ComboBox an ein eigenes ViewModel gebunden. Mein ViewModel ist das Grundgerüst für ein Binding an ein TreeView.

Es enthält somit eine Items-Property, in welcher Child-Elemente vorhanden sind. Ein Objekt vom Typ TreeViewItemViewModel hat neben der Items-Property einige weitere Eigenschaften wie z.B. Name etc.

Das Binding funktioniert sehr gut. Durch Trigger habe ich erreicht, dass sich ein DropDown-Menü öffnet, sobald man eine Taste in der ComboBox drückt. In dieser werden alle Elemente anhand der Text-Eigenschaft der ComboBox gefiltert.

Ein Problem existiert jedoch: Angenommen, ich drücke in der ComboBox (bei leerer Text-Property) die Taste "A". Zunächst wird der Buchstabe eingefügt. Danach bewirkt mein Trigger, dass sich das DropDown öffnet. Im selben Moment wird jedoch der gesamte Text markiert, sodass das "A" bei der Eingabe eines weiteren Buchstabens überschrieben wird.

Ich habe nicht die geringste Ahnung, wie ich dem Problem beikommen kann, und hoffe daher auf Eure Hilfe.

Hier der XAML-Code:

PHP:
<ComboBox Name="cbo" 
                              VerticalContentAlignment="Center" 
                              Padding="6,1" 
                              FontStyle="Italic" 
                              Width="200" 
                              Height="25" 
                              Foreground="Black" 
                              IsTextSearchEnabled="True" 
                              Background="#00000000" 
                              IsEditable="True" 
                              KeyDown="cbo_KeyDown" 
                              StaysOpenOnEdit="True"
                              Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=SelectedItem}"
                              ItemsSource="{Binding Path=XmlTreeViewItemViewModel.Items}"
                              >              
                        <ComboBox.Style>
                            <Style TargetType="{x:Type ComboBox}">
                                <Style.Triggers>
                                <Trigger Property="IsFocused" Value="False">
                                    <Setter Property="Text" Value="Search..."/>
                                </Trigger>
                                </Style.Triggers>
                                <Setter Property="Text" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=SelectedValue.Name}"></Setter>
                            </Style>
                        </ComboBox.Style>
                        <ComboBox.Triggers>
                            <EventTrigger SourceName="cbo" RoutedEvent="ComboBox.KeyDown">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <BooleanAnimationUsingKeyFrames Storyboard.TargetName="cbo" Storyboard.TargetProperty="IsDropDownOpen">
                                            <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True"></DiscreteBooleanKeyFrame>
                                        </BooleanAnimationUsingKeyFrames>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </ComboBox.Triggers>
                        <ComboBox.ItemContainerStyle>
                            <Style TargetType="{x:Type ComboBoxItem}">
                                <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}"/>
                                <Setter Property="Visibility" Value="{Binding Path=Visibility, Mode=TwoWay}"/>
                            </Style>
                        </ComboBox.ItemContainerStyle>  
                        <ComboBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Width="600">
                                    <TextBlock Text="{Binding Name}" FontWeight="Bold"></TextBlock>
                                    <TextBlock Text="{Binding XmlNode.InnerText}"></TextBlock>
                            </StackPanel>
                            </DataTemplate>
                        </ComboBox.ItemTemplate>
                    </ComboBox>
 
Zurück
Oben