.net - databinding - WPF Binding Collection Para ComboBox y Seleccionar un elemento
wpf combobox datacontext (3)
En XAML, establezca ItemsSource="{Binding}"
y (en el código que está detrás) configure DataContext
en myAssembly.PossibleTypes
.
He estado golpeando mi cabeza contra esto desde hace un tiempo. No estoy muy seguro de por qué no está funcionando. Todavía soy bastante nuevo en este negocio de WPF.
Aquí está mi XAML para el combobox
<ComboBox
SelectedValuePath="Type.FullName"
SelectedItem="{Binding Path=Type}"
Name="cmoBox" />
Esto es lo que completa el ComboBox (myAssembly es una clase que creé con una lista de tipos posibles)
cmoBox.ItemsSource = myAssembly.PossibleTypes;
Configuro el DataContext en un elemento padre de ComboBox en el código detrás de esta manera:
groupBox.DataContext = listBox.SelectedItem;
Quiero que el enlace seleccione el "tipo posible" correcto en el cuadro combinado. No selecciona nada. He probado SelectedValue y SelectedItem. Cuando cambié el DisplayMemberPath del ComboBox a una propiedad diferente, cambió lo que se mostraba, así que sé que no está completamente roto.
¿¿¿Algunas ideas???
Estoy de acuerdo: los enlaces deberían estar en el XAML. Puse ... comprobando ... nada en el código detrás, nunca. Las fuentes de datos son todos "recursos" reutilizables.
(Bueno, está bien, el constructor de código subyacente llama a InitializeComponent ()).
También podría establecer el enlace en el xaml en lugar de en el código subyacente (siempre que sea posible, evitamos el código en nuestras páginas xaml). Supongo que myAssembly es una propiedad de tu código subyacente para el control y es una instancia de tu clase MyAssembly ...
<UserControl
x:Class="MyNamespace.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding}">
<ComboBox
Width="200"
ItemsSource="{Binding Path=myAssembly.PossibleTypes}"
SelectedValuePath="Type.FullName"
SelectedItem="{Binding Path=Type}"
Name="cmoBox" />
</UserControl>
Puede ser solo una preferencia personal, pero creo que es una mejor práctica tener los enlaces de datos en el xaml, ya que hace que sea más fácil ver a lo que está sujeto cada control sin tener que pasar por el código subyacente. Además, si desea hacer referencia a su ComboBox desde el código, debe asignarle una propiedad x: Name en el xaml en lugar de solo Name.