2008-11-22 15 views
8

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.WPF Encuadernación Colección a ComboBox y Selección de un elemento

Aquí es mi XAML para el cuadro combinado

<ComboBox 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 

Esto es lo que rellena el cuadro combinado (myAssembly es una clase que creé con una lista de posibles tipos)

cmoBox.ItemsSource = myAssembly.PossibleTypes; 

fijo el DataContext en una matriz elemento del ComboBox en el código detrás de esta manera:

groupBox.DataContext = listBox.SelectedItem; 

Quiero el bindin g para seleccionar el "tipo posible" correcto del 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.

¿Alguna idea ???

Respuesta

11

En el XAML, establezca ItemsSource="{Binding}" y (en el código de detrás) configure DataContext en myAssembly.PossibleTypes.

+0

Funcionó muy bien! Gracias –

+0

:) No lo probé ... pero he estado metiéndome en WPF mucho recientemente (debido a usarlo en el trabajo) ... pensé que esto era 100% correcto o muy lejos. –

12

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). Estoy asumiendo que myAssembly es una propiedad en el código subyacente para el control y es una instancia de la 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 que sólo sea la preferencia personal, pero creo que es mejor tener la práctica los enlaces de datos en el xaml, ya que hace que sea más fácil ver a qué se vincula cada control sin tener que rastrear 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.

-5

Estoy de acuerdo: los enlaces deben estar en el XAML. Puse ... comprobando ... nada en el código detrás, nunca. Las fuentes de datos son todos "recursos" reutilizables.

(bueno, OK, el constructor de código subyacente llama a InitializeComponent()).

+1

No ha respondido esta pregunta en absoluto. No ha agregado nada más que su preferencia irrelevante para no usar código detrás. Además, la pregunta ya había sido respondida correctamente 18 meses antes de que se publicara su 'respuesta'. Por estas razones, -1. – Sheridan

+0

@Sheridan: +1 para comentar por qué dar un punto negativo. –

Cuestiones relacionadas