Domanda

So che in ASP.NET posso ottenere un elemento da un DropDownList utilizzando

DropDownList1.Items.FindByText

Esiste un metodo simile che posso utilizzare in WPF per un ComboBox?

Ecco lo scenario.

Ho una tabella chiamata RestrictionFormat che contiene una colonna chiamata RestrictionType, il tipo è una chiave esterna per una tabella che memorizza questi valori.

Nella mia applicazione editor sto scrivendo, quando l'utente seleziona RestrictionFormat da un ComboBox (funziona bene), sto recuperando i dettagli per la modifica.Sto utilizzando un secondo ComboBox per assicurarmi che l'utente selezioni solo un RestrictionType durante la modifica.Ho già la seconda proprietà associata alla casella combinata dalla tabella RestrictionType, ma devo modificare l'indice selezionato su di essa in modo che corrisponda al valore specificato nel record.


Ecco lo scenario.

Ho una tabella chiamata RestrictionFormat che contiene una colonna chiamata RestrictionType, il tipo è una chiave esterna per una tabella che memorizza questi valori.

Nella mia applicazione editor sto scrivendo, quando l'utente seleziona RestrictionFormat da un ComboBox (funziona bene), sto recuperando i dettagli per la modifica.Sto utilizzando un secondo ComboBox per assicurarmi che l'utente selezioni solo un RestrictionType durante la modifica.Ho già la seconda proprietà associata alla casella combinata dalla tabella RestrictionType, ma devo modificare l'indice selezionato su di essa in modo che corrisponda al valore specificato nel record.

Ha senso ciò?

È stato utile?

Soluzione

Puoi usare ItemContainerGenerator?

ItemContainerGenerator contiene un metodo ContainerFromItem che accetta un parametro dell'oggetto.Se hai un riferimento all'oggetto completo contenuto nel tuo comboBox (o un modo per ricostruirlo), puoi utilizzare quanto segue:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

Altri suggerimenti

In WPF puoi utilizzare il metodo FindName.

XAML:

    <ComboBox Name="combo">
        <ComboBoxItem Name="item1" >1</ComboBoxItem>
        <ComboBoxItem Name="item2">2</ComboBoxItem>
        <ComboBoxItem Name="item3">3</ComboBoxItem>
    </ComboBox>

File code-behind

   item1.Content = "New content"; // Reference combo box item by name
   ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method

Per trovare l'elemento in base al suo contenuto è possibile utilizzare Automazione dell'interfaccia utente.

invece di provare ad associare SelectedIndex, perché non leghi semplicemente SelectedItem nel ComboBox al valore nel record?

in altre parole, imposta DataContext del ComboBox (o del suo genitore) sul "record" selezionato e associa SelectedItem sul ComboBox a una proprietà esposta sul "record".

potrebbe essere utile fornire alcuni frammenti di codice o dettagli aggiuntivi in ​​modo che le risposte possano essere più specifiche e fare riferimento alle variabili e ai tipi che stai utilizzando sia nel record di origine che nel ComboBox che hai popolato.

Puoi recuperare gli elementi della casella combinata in due modi:

Per articolo:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);

Per indice:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

Puoi fornire un contesto su cosa stai cercando di fare esattamente?

Quali oggetti inserisci nella tua Combobox e utilizzando quale metodo?(Stai impostando o vincendo la proprietà SoggetSource?) Perché devi cercare un elemento con il suo "testo"?L'utilizzo più comune in WPF è associare la proprietà SelectedItem a qualcos'altro in modo da poter recuperare/impostare la voce selezionata utilizzando la rappresentazione.C'è un requisito specifico per il quale è necessario trovare un elemento specifico nell'elenco?

Nel peggiore dei casi, puoi eseguire la ricerca sulla raccolta a cui associ il tuo ComboBox utilizzando Linq To Objects.

Non confondere ComboBoxItem (ovvero l'elemento generato per te dietro le quinte da WPF quando esegui l'associazione di ItemsSource) con SelectedItem, che è l'oggetto effettivo nella raccolta a cui ti associ.Di solito questa è la fonte della maggior parte dei problemi con WPF quando non ci sei abituato.Ci sono pochi casi preziosi in cui è necessario trovare l'effettivo ComboBoxItem.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top