Wpf MVVM Autocomplete

0

Hej, potrzebuję wykorzystać własność TextBox z WinForms - AutoComplete, której niestety w WPF nie ma :(

Ciężko znaleźć jakieś ciekawe rozwiązanie, które też by się nie kłóciło z wzorcem MVVM.

Konkretnie potrzebuję przy wpisywaniu wartości textbox (lub innej kontrolki, może być ComboBox lub coś innego, byle można było bindować do własności w VM), żeby proponował treść z generycznej kolekcji.

Nim w akcie desperacji zacznę sprawdzać każdy pakiet i bibliotekę, chcę się spytać, czy Wy możecie polecić jakieś dobre i darmowe sprawdzone rozwiązanie?

Z góry dzięki.

1
bakunet napisał(a):

Hej, potrzebuję wykorzystać własność TextBox z WinForms - AutoComplete, której niestety w WPF nie ma :(

Ciężko znaleźć jakieś ciekawe rozwiązanie, które też by się nie kłóciło z wzorcem MVVM.

Konkretnie potrzebuję przy wpisywaniu wartości textbox (lub innej kontrolki, może być ComboBox lub coś innego, byle można było bindować do własności w VM), żeby proponował treść z generycznej kolekcji.

Nim w akcie desperacji zacznę sprawdzać każdy pakiet i bibliotekę, chcę się spytać, czy Wy możecie polecić jakieś dobre i darmowe sprawdzone rozwiązanie?

Z góry dzięki.

Witam,

Zobacz https://github.com/dotnetprojects/WpfToolkit

Pozdrawiam,

mr-owl

0
mr-owl napisał(a):

Witam,

Zobacz https://github.com/dotnetprojects/WpfToolkit

Pozdrawiam,

mr-owl

Hej, wydawało mi się, że pójdzie mi z tym łatwo. Ale niestety, zainstalowałem pakiet, zrobiłem wszystko jak w instrukcji i nie działa :)

Instrukcja: https://www.broculos.net/2014/04/wpf-autocompletebox-autocomplete-text.html

W modelu widoku mam metodę i własność:

private void LoadAllData()
        {
            _allJockeys = _dataServices.GetAllJockeys().ToList();

            _allHorses = _dataServices.GetAllHorses().ToList();

            _allRaces = _dataServices.GetAllRaces().ToList();

            for (int i = 0; i < _allHorses.Count; i++)
            {
                loadedHorses.Add(_allHorses[i].Name + ", " + _allHorses[i].Age.ToString());
            }
        }

public IEnumerable<string> LoadedHorses
        {
            get
            {
                return loadedHorses;
            }
        }

Gdzie w powyższym kodzie loadedHorses jest typu List<string>, ale chyba to nie powinno stanowić problemu, skoro List<T> implementuje IEnumerable<T>.

Następnie w widoku umieszczam kontrolkę:

 <toolkit:AutoCompleteBox
                                FilterMode="Contains"
                                IsTextCompletionEnabled="True"
                                Text="{Binding Path=HorseName, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
                                ItemsSource="{Binding LoadedHorses}"
                                Height="20"
                                Width="130"/>

Niestety przy wpisywaniu treści nie podpowiada ona itemów z loadedHorses :(

0

Ok, zapomniałem, że kontrolka jest częścią szablonu w ListBox i bindowanie jest nieco inne niż zwykle. Listę połączyłem przy wykorzystaniu ItemsSource="{Binding DataContext.LoadedHorses, RelativeSource={RelativeSource AncestorType=ListBox}}".

@mr-owl, dzięki za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1