Tutaj mam alternatywne rozwiązania w MVVM.
mój plik XAML:
<ComboBox Name="cmbContains" IsEditable="True" IsTextSearchEnabled="false" ItemsSource="{Binding pData}" DisplayMemberPath="wTitle" Text="{Binding SearchText ,Mode=TwoWay}" >
<ComboBox.Triggers>
<EventTrigger RoutedEvent="TextBoxBase.TextChanged">
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsDropDownOpen">
<DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:0"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ComboBox.Triggers>
</ComboBox>
mój plik CS:
//ItemsSource - pData
//There is a string attribute - wTitle included in the fooClass (DisplayMemberPath)
private ObservableCollection<fooClass> __pData;
public ObservableCollection<fooClass> pData {
get { return __pData; }
set { Set(() => pData, ref __pData, value);
RaisePropertyChanged("pData");
}
}
private string _SearchText;
public string SearchText {
get { return this._SearchText; }
set {
this._SearchText = value;
RaisePropertyChanged("SearchText");
//Update your ItemsSource here with Linq
pData = new ObservableCollection<fooClass>{pData.ToList().Where(.....)};
}
}
Możesz zobaczyć edytowalne combobox jest wiążąca do łańcucha (SearchText) Gdy nie jest wydarzeniem TextChanged spadek w dół jest wyświetlane, a powiązanie dwukierunkowe aktualizuje wartość. Źródło ItemsSource zostało zmienione w pliku cs, gdy przechodzi do zbioru {}; składnia.
A gist with the code above
To lepiej. Jednak nie głosowałem. Twoja odpowiedź jest omawiana w Meta http://meta.stackoverflow.com/questions/327540/was-my-edit-removing-noise-and-a-link-wrong, więc zamierzasz zachęcić wiele osób do odwiedzenia . – JRSofty