Avatar
Martin Turner:

Zdravím,

mohl bych požádat o pomoc?
Snažím se vytvořit aplikaci, kde editovatelný ComboBox je plněn pomocí Bindingu a události PropertyChange­dEventHandler PropertyChanged z kolekce ObservableCollec­tion<>().

<ComboBox Name="projektComboBox" IsEditable="true" IsReadOnly="false" IsEnabled="true" ItemsSource="{Binding ZadaneProjekty}" KeyDown="zadejNovyProjekt_KeyEvent" SelectionChanged="volbaProjektu_SelectionChanged"  />

Událost KeyDown vypadá takto:

private void zadejNovyProjekt_KeyEvent(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {
        // Provedeni kodu
    }
}

Pokud mám Combobox prázdný vše funguje bez problémů, kod se provede po stiknutí Enter, ale pokud v Comboboxu už nějaké položky mám a začnu zadávat novou, který má např. stejná počáteční písmena, tak mě Combobox začne nabízet jednu s těchto existujích položek a při pokračování zadání se začne provádět kód vázaný na událost SelectionChanged ještě před stiskem Enter.

Můj cíl je toto eliminovat a neprovádět nic, dokud nestisknu Enter.
Nevím zda jsem problém popsal dost srozumitelně, kdyžtak dovysvětlím.

Moc děkuji za každou připomínku.

 
Odpovědět 14.10.2015 10:07
Avatar
Libor Šimo (libcosenior):

Neviem, či som ťa správne pochopil, ale ja pridávam do kolekcie nové itemy v novom okne.

Nahoru Odpovědět 14.10.2015 10:19
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Martin Turner:

Edituji přímo Combobox (editable = true) a když už obsahuje Items, tak mi vyplňování zafunguje našeptávač podobných položek a tím se spustí SelectionChanged dříve, než to vůbec dopíšu a stisknu Enter. Asi bych SelectionChanged potřeboval "vypnout" dokud nestisknu ten Enter.

Ty needituješ přímo Textbox, ale vkládáš do něj už kompletní řetězec?
To je taky řešení, to zvážím.
Díky.

 
Nahoru Odpovědět 14.10.2015 10:36
Avatar
Odpovídá na Martin Turner
Michal Štěpánek:

Napadlo mě tu proceduru vykonat ve chvíli, kdy combobox ztratí focus, tzn v události LostFocus a událost SelectionChanged zrušit.

Nahoru Odpovědět 14.10.2015 10:49
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Martin Turner:

Díky.
Mohu Tě požádat o vysvětlení, jak LostFocus funguje? Z MSDN jsem to popravdě moc nepochopil.
Myslíš časové zrušebí SelectedChanged po dobu editace? Jak na to? Potřebuji v ComboBoxu potom položky vybírat a na změnu reagovat, tak nevím, zda bych o to nepřišel, kdybych SelectedChanged zrušil úplně.

 
Nahoru Odpovědět 14.10.2015 11:01
Avatar
Odpovídá na Martin Turner
Michal Štěpánek:

No asi takto. Teď se ti něco v kódu provede při události ComboBoxu SelectionChanged. Zkusil bych tu proceduru spuštět v události LostFocus a tu SelectionChanged bych zrušil (nebo jen zakomentoval)...
Pak když v ComboBoxu něco vybereš a stiskneš třeba tabelátor, tím se Focus přesune na jiný objekt a vykoná se "ta" procedura...
EDIT
Místo SelectionChanged bys mohl pro následné vybírání použít třeba DropDownClosed

Editováno 14.10.2015 11:06
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 14.10.2015 11:04
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Martin Turner:

Zaměnil jsem pouze SelectionChanged za DropDownClosed a funguje to tak, jak potřebuji.
Chytrej, díky moc. :-D

 
Nahoru Odpovědět 14.10.2015 11:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.