Uso un datatemplate para visualizar algunos elementos en un ComboBox, ItemsSource está vinculado a un ObservableCollection. que sea sencillo, digamos que puse personas en el ObservableCollection:Establecer TextSearch.Text para WPF-ComboBoxItem a través de DataTemplate
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
Mi DataTemplate se parece a esto:
<DataTemplate TargetType="{x:Type Person}">
<StackPanel Orientation="Horizontal">
<TextSearch.Text>
<MultiBinding StringFormat="{} {0} {1}">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextSearch.Text>
<TextBlock Text="{Binding FirstName}" Margin="2,0" />
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
Ahora desea habilitar el autocompletado de nombres completos en el cuadro combinado sin introducir una tercera propiedad en mi clase de persona. Por lo tanto, no quiero utilizar TextSearch.TextPath Property en el ComboBox, sino que me gustaría vincular el TextSearch.Text-Property de cada ComboBoxItem en el DataTemplate. Desafortunadamente, cuando hago esto (que funciona con un MultiBinding y StringFormat, probado con Snoop), el valor encuadernado se registra solo para mi StackPanel, pero al usar Snoop (gran herramienta) encontré que este stackpanel sirve como contenido para otros ComboBoxItemTemplate, que pone otro borde, etc. y finalmente una etiqueta ComboBoxItem alrededor de mi StackPanel externo. Por lo tanto, la configuración TextSearch.Text no es efectiva, porque debe establecerse en el ComboBoxItem creado, y no en algún lugar dentro.
Pregunta ahora: ¿Cómo puedo propagar este TextSearch.Text-Property desde mi DataTemplate al ComboBoxItem circundante usando XAML-Styles y -Control-Templates solamente? La solución puede modificar las Plantillas de control predeterminadas de ComboBox y ComboBoxItem y mi personalizada (Elemento) DataTemplate, pero no usar ningún código subyacente, o al menos no demasiado. Tal vez un comportamiento adjunto estaría bien, también. Pero estoy casi seguro de que debe haber una forma de hacerlo funcionar sin, TemplateBinding o RelativeSource-cosas ... Y, por supuesto, la solución debe hacer que mi selección de teclado y texto completen, en el s.th. cuando la lista contiene a Hans Josef y Hans Peter, entonces al ingresar a 'Hans' se debe autosugerir a Hans Josef, mientras que entrar a 'Hans P' con la suficiente rapidez debe autosuguar a Hans Peter.
¿Alguna solución?
Al menos ahora me siento bastante seguro de que la tarea no es muy fácil. O el texto largo solo hace que la gente huya en pánico ... –
Estoy a punto de abandonarlo. Logré hacer que ComboBoxItem llevara la TextSearch.Text-Property correcta configurándola en ComboBox.ItemContainerStyle (en lugar de ItemTemplate, como lo hice antes). Ahora se ve bastante bien en el árbol visual (Snoop otra vez), pero desafortunadamente no tiene ningún efecto. No hay selección teniendo lugar después de escribir 'Hans' o lo que sea. –