WPF AutoCompleteBox - Как ограничить его выбирать только из списка предложений?
-
27-09-2019 - |
Вопрос
Я хотел бы ограничить WPF AutoCompleteBox (Control Toolkit WPF), чтобы выбрать элемент только из списка предложений. Это не должно позволить пользователям печатать все, что они хотят.
Может кто-нибудь предложить мне, как это реализовать? Любой образец кода ценится.
Решение
Вот как я это сделал. Создайте полученный класс и переопределите OnPreviewTextInput. Установите свою коллекцию в свойство элементов управления элементами управления, и оно должно работать красиво.
public class CurrencySelectorTextBox : AutoCompleteBox
{
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
var currencies = this.ItemsSource as IEnumerable<string>;
if (currencies == null)
{
return;
}
if (!currencies.Any(x => x.StartsWith(this.Text + e.Text, true, CultureInfo.CurrentCulture))
{
e.Handled = true;
}
else
{
base.OnPreviewTextInput(e);
}
}
}
Другие советы
Вы можете ограничить пользователю по событию View Coundiew. Я надеюсь, что это будет работать ...
Если вы имеете воспоминания о недвижимости, как это на примере
<sdk:AutoCompleteBox ItemsSource="{Binding Sites, Source={StaticResource VmSchedulel}}" ValueMemberPath="SiteName"
SelectedItem="{Binding Site, Mode=TwoWay}" FilterMode="ContainsOrdinal">
<sdk:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SiteName}"/>
</DataTemplate>
</sdk:AutoCompleteBox.ItemTemplate>
</sdk:AutoCompleteBox>
Если введен какой-то текст, который не совпадает с элементами элементов, выделенныйITEM будет равен нулю. В наборе метода вашего свойства вы можете просто не установить значение, потому что это NULL, и свойство будет сохранять исходное значение.
set
{
if (value != null)
{
BaseRecord.SiteID = value.ID;
PropChanged("Site");
}
}