Umgang mit WPF Editierbare combobox bei der Eingabe von text ist nicht ein Teil der datsource
Ich habe eine Combobox-Komponente in WPF habe ich Ist Editable="true", die ermöglicht es mir, geben Sie beliebigen text in die combobox. Ich möchte verhindern, dass Benutzer die Eingabe von text außerhalb datasource.
Xaml:
<ComboBox Name="service" Margin="0,0,0,4"
IsEditable="True"
Grid.Column="1"
Grid.ColumnSpan="2" Grid.Row="4"
SelectedValuePath="Id"
DisplayMemberPath="Service"
SelectedValue="{Binding Controller.Service1}"
ItemsSource="{Binding}" />
C#:
System.Data.DataView vw = tableAdapterServices.GetData().DefaultView;
service.ItemsSource = vw;
service.SelectedIndex = 0;
Ich nicht zulassen möchten, dass Benutzer text eingeben, die nicht in der Datenquelle, oder Sie behandeln es, wenn der Benutzer einen anderen text.
Update:
Danke für die Lösung @Herby, LostFocus-Ereignis ist der Umgang mit diesem Thema, aber es gab Anlass zu einer weiteren Frage. Ich habe eine Schaltfläche, die zum Absenden der combobox-Wert zusammen mit anderen textbox-Werte an den server. Ich bin Einstellung default-Wert in der combobox im lostfocus-Ereignis. Aber ich muss verhindern, dass die Schaltfläche click-Ereignis, wenn einige anderen Wert, die datasource-Wert im Kombinationsfeld.
InformationsquelleAutor Arti | 2014-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie überprüfen, ob selectedIndex im Lostfocus-Ereignis :
InformationsquelleAutor Vishal
Können Sie versuchen, Umgang mit der ComboBox-Komponente die TextInput-oder PreviewTextInput Ereignisse, dabei wird die text-Suche selbst, Auswahl der geeigneten Element, und die Einstellung "e.Behandelt = wahr."
Dies funktioniert für ein einzelnes Zeichen (z.B., wenn Sie geben Sie den Buchstaben "j", wählen Sie den ersten Eintrag mit einem "j" oder "J"), aber ich bin sicher, es gibt eine Möglichkeit, dies zu tun mit Ihren Steuern. Nur ein wenig mehr Logik, um dies zu erreichen.
InformationsquelleAutor Nomi Ali
Ok, von dem was ich verstehe das Verhalten der combobox außer acht lassen sollte ein eingefügtes Zeichen, wenn es kein Element in der Datenquelle, enthält der resultierende string.
Ich glaube, Sie tun es in einer MVVM-Stil, da Sie sind mit binding. Was Sie tun können, ist, zu binden, das ComboBox-text auf eine Eigenschaft und die PreviewTextInput Ereignis, um einen Befehl und die Filterung gibt.
XAML:
C# ViewModel:
Wo
Items
ist die ObservableCollection mit den Elementen (in diesem Fall ist es eine Liste von strings) undText
ist die Eigenschaft der gebundenen Combobox text.EDIT: Ok so, was Sie tun müssen, um es Arbeit zu gehen, um Ihr Projekt mit der rechten Maustaste auf Verweise, wählen Sie NuGet-Pakete Verwalten, suchen und installieren
MVVM Light
. Zwei dlls, die beginnen mitGalaSoft
Hinzugefügt werden, um Ihre Referenzen. Nach diesem, in Ihren xaml-code fügen Sie diesen namespaces:Was dies ermöglicht es Ihnen zu tun, ist binden ein Ereignis für eine ICommand-Objekt.
The attachable property 'Triggers' was not found in type 'Interaction'.
wenn ich verwenden Sie xaml.InformationsquelleAutor Titanium