Texto do AutoCompleteTox em Silverlight
-
27-09-2019 - |
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 */
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.