combobox with values wpf
WPF Combobox DisplayMemberPath (5)
Alternativamente, no es necesario configurar DisplayMemberPath. solo puede incluir una anulación de ToString () en su objeto que está en su Lista de Prompt. Me gusta esto:
class Prompt {
public string Name = "";
public string Value = "";
public override string ToString() {
return Name;
}
}
ToString () se llamará automáticamente y mostrará el parámetro Name de su clase. esto funciona para ComboBoxes, ListBoxes, etc.
Ok, miré otras preguntas y no parecía obtener mi respuesta, así que espero que alguien aquí pueda.
Pregunta muy simple ¿por qué la propiedad DisplayMemberPath no se une al elemento?
<ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding PromptList}" DisplayMemberPath="{Binding Name}" SelectedItem="{Binding Prompt}"/>
El resultado del rastreo muestra que está intentando vincularse a la clase que contiene IEnumerable, no el elemento real en IEnumerable. Estoy confundido en cuanto a una forma simple de llenar un cuadro combinado sin agregar un grupo de líneas en xaml.
Simplemente llama a ToString () para el objeto en itemssource. Tengo un trabajo que es este:
<ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding PromptList}" SelectedItem="{Binding Prompt}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Pero en mi opinión es demasiado para una tarea tan simple. ¿Puedo usar un enlace de sourcesource?
Debería cambiar MemberPath="{Binding Name}"
en MemberPath="Name"
. Entonces funcionará.
No está vinculando los datos de la clase, le dice que obtenga sus datos del miembro de la clase que recibe el nombre "nombre" del miembro, por lo que si su instancia tiene item.Name == "steve"
está intentando obtener los datos de item.steve
.
Para que esto funcione, debes eliminar el enlace de MemberPath. MemberPath = "Name"
a MemberPath = "Name"
esto le dice que obtenga los datos del miembro "Nombre". De esa forma llamará item.Name
, no item.steve
.
Puede eliminar DisplayMemberPath y luego establecer la ruta en TextBlock.
DisplayMemberPath es realmente para cuando no tiene ItemTemplate.
O puede eliminar su ItemTemplate y usar DisplayMemberPath, en cuyo caso básicamente crea un TextBlock para usted. No es recomendable que hagas ambas cosas.
<TextBlock text="{Binding Path=Name, Mode=OneWay}"
DisplayMemberPath
especifica la ruta a la propiedad de cadena de visualización para cada elemento. En tu caso, lo ajustaste a "Name"
, no a "{Binding Name}"
.