Pergunta

Eu sei que no ASP.NET posso obter um item de um DropDownList usando

DropDownList1.Items.FindByText

Existe um método semelhante que posso usar no WPF para um ComboBox?

Aqui está o cenário.

Tenho uma tabela chamada RestrictionFormat que contém uma coluna chamada RestrictionType, o tipo é uma chave estrangeira para uma tabela que armazena esses valores.

No meu aplicativo editor que estou escrevendo, quando o usuário seleciona RestrictionFormat em um ComboBox (isso funciona bem), estou puxando os detalhes para edição.Estou usando um segundo ComboBox para garantir que o usuário selecione apenas um RestrictionType ao editar.Já tenho a segunda propriedade vinculada à caixa de combinação da tabela RestrictionType, mas preciso alterar o índice selecionado nela para corresponder ao valor especificado no registro.


Aqui está o cenário.

Tenho uma tabela chamada RestrictionFormat que contém uma coluna chamada RestrictionType, o tipo é uma chave estrangeira para uma tabela que armazena esses valores.

No meu aplicativo editor que estou escrevendo, quando o usuário seleciona RestrictionFormat em um ComboBox (isso funciona bem), estou puxando os detalhes para edição.Estou usando um segundo ComboBox para garantir que o usuário selecione apenas um RestrictionType ao editar.Já tenho a segunda propriedade vinculada à caixa de combinação da tabela RestrictionType, mas preciso alterar o índice selecionado nela para corresponder ao valor especificado no registro.

Isso faz sentido?

Foi útil?

Solução

Você pode usar o ItemContainerGenerator?

ItemContainerGenerator contém um método ContainerFromItem que usa um parâmetro de objeto.Se você tiver uma referência ao objeto completo que seu comboBox contém (ou uma forma de reconstruí-lo), você pode usar o seguinte:

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

Outras dicas

No WPF você pode usar o método FindName.

XAML:

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

Arquivo code-behind

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

Para encontrar o item pelo seu conteúdo, você pode usar Automação da IU.

em vez de tentar vincular o SelectedIndex, por que você simplesmente não vincula o SelectedItem no ComboBox ao valor no registro?

em outras palavras, defina o DataContext do ComboBox (ou seu pai) para o 'registro' selecionado e vincule o SelectedItem no ComboBox a uma propriedade exposta no 'registro'.

pode ajudar se você fornecer alguns trechos de código ou detalhes extras para que as respostas possam ser mais específicas e se referir às variáveis ​​​​e tipos que você está usando no registro de origem e no ComboBox que você preencheu.

Você pode recuperar itens da caixa de combinação de duas maneiras:

Por item:

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

Por índice:

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

Você pode fornecer algum contexto sobre o que exatamente você está tentando fazer?

Quais objetos você coloca no seu Combobox e usando qual método?(Você está definindo ou vinculando a propriedade Itens Source?) Por que você precisa procurar um item por seu "texto"?O uso mais comum no WPF é vincular a propriedade SelectedItem a outra coisa para que você possa recuperar/definir a entrada selecionada usando sua representação.Existe um requisito específico para o qual você precisa encontrar um item específico na lista?

Na pior das hipóteses, você pode realizar a pesquisa na coleção à qual você vincula seu ComboBox usando Linq To Objects.

Não confunda o ComboBoxItem (ou seja, o elemento gerado para você nos bastidores pelo WPF quando você vincula ItemsSource) com o SelectedItem, que é o objeto real na coleção à qual você vincula.Essa geralmente é a fonte da maioria dos problemas com o WPF quando você não está acostumado.Existem poucos casos em que você precisa encontrar o ComboBoxItem real.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top