Pergunta

Estou tendo problemas para obter a caixa de preenchimento automático em System.windows.controls.input funcionando como eu desejo. Quando começo a digitar a seção suspensa que exibe a lista filtrada não mostra a propriedade à qual estou vinculando, ela mostra o nome da classe.

Então, no exemplo abaixo, quando digito meu - em vez de mostrar 'meu nome', ele mostra mynamespace.person. No entanto, quando seleciono o item na lista de preenchimento automático, ele exibe a propriedade FullName na caixa de texto. Tenho certeza de que estou apenas perdendo uma propriedade simples da caixa de preenchimento automático em algum lugar, mas não consigo vê -la.

Código de exemplo:

public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName
        {
            get { return string.Format("{0} {1}", FirstName, LastName); }
        }
    }

No meu código XAML por trás, crio alguns objetos de pessoa e armazenam -os em uma lista e vinculam essa lista a uma caixa de preenchimento automático

List<Person> people = new List<Person>();
people.Add(new Person { FirstName = "My", LastName = "Name" });
people.Add(new Person { FirstName = "Fernando", LastName = "Torres" });
acbNames.ItemsSource = people;

Meu xaml:

<my:AutoCompleteBox Name="acbNames" ValueMemberPath="FullName" />

/ * Depois de inserir 'meu', exibe automaticamente 'mynamespace.person' em vez de 'meu nome', mas exibe 'meu nome' depois de selecionar o item da lista */

Foi útil?

Solução

Acontece que eu preciso usar um itemTemplate para a parte suspensa do AutoCompleteBox, então o XAML, pois agora seria o seguinte:

<my:AutoCompleteBox Name="acbNames" ValueMemberBinding="{Binding FullName}">
            <my:AutoCompleteBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding FullName}"/>
                </DataTemplate>
            </my:AutoCompleteBox.ItemTemplate>
        </my:AutoCompleteBox>

Outras dicas

Sim, seu problema foi porque você não colocou o modelo do item. Mas se você colocar o modelo do item e ainda ter problemas, leia o que Sandro quebrou.

Eu tive o mesmo problema. Eu resolvi usando um recurso estático para o estilo de controle

Este é o estilo que usei:

<Style x:Key="autocomplete" TargetType="sdk1:AutoCompleteBox">
    <Setter Property="Margin" Value="5,0,5,0"/>
    <Setter Property="MinWidth" Value="100"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property ="HorizontalAlignment" Value="Right"/>
</Style>

Se eu não usar esse estilo, meu item alfandegário não é exibido corretamente, pois eu configuro no Dataitem, ele mostra o nome da classe.

Compartilhar | Editar

Isso também funciona para mim, mas apenas quando apliquei algum estilo de tema personalizado no Toolkit. Existem outras soluções alternativas quando você usa o tema do Toolkit

melhor,

DeBarisi

Eu tive o mesmo problema. Eu resolvi usando um recurso estático para o estilo de controle

Este é o estilo que usei:

    <Style x:Key="autocomplete" TargetType="sdk1:AutoCompleteBox">
        <Setter Property="Margin" Value="5,0,5,0"/>
        <Setter Property="MinWidth" Value="100"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property ="HorizontalAlignment" Value="Right"/>
    </Style>

Se eu não usar esse estilo, meu item alfandegário não é exibido corretamente, pois eu configuro no Dataitem, ele mostra o nome da classe.

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