¿Cómo puedo vincular los datos una lista de cadenas a un ListBox en WPF / WP7?

Estoy intentando vincular una lista de valores de cadena a un cuadro de lista para que sus valores se enumeren línea por línea. Ahora mismo uso esto:

         

Pero no sé lo que debo poner en el bloque de texto, en lugar de Id , ya que son todos valores de cadena, no clases personalizadas.

También se queja de no tener que encontrar los PersonNames cuando lo tengo dentro de MainPage, como MainPage.PersonNames.

Establecí el contexto de datos a:

 DataContext="{Binding RelativeSource={RelativeSource Self}}" 

Lo estoy haciendo mal?

Si simplemente pone que su ItemsSource está limitado así:

 YourListBox.ItemsSource = new List { "One", "Two", "Three" }; 

Tu XAML debería verse así:

          

Actualizar:

Esta es una solución cuando se usa un DataContext. El siguiente código es el modelo de vista que pasará al DataContext de la página y la configuración del DataContext:

 public class MyViewModel { public List Items { get { return new List { "One", "Two", "Three" }; } } } //This can be done in the Loaded event of the page: DataContext = new MyViewModel(); 

Tu XAML ahora se ve así:

          

La ventaja de este enfoque es que puede poner muchas más propiedades u objetos complejos en la clase MyViewModel y extraerlos en XAML. Por ejemplo, para pasar una lista de objetos Persona:

 public class ViewModel { public List Items { get { return new List { new Person { Name = "P1", Age = 1 }, new Person { Name = "P2", Age = 2 } }; } } } public class Person { public string Name { get; set; } public int Age { get; set; } } 

Y el XAML:

           

¡Espero que esto ayude! 🙂

Debería mostrarnos el Código para PersonNames, y no estoy seguro, entiendo su pregunta, pero tal vez quiera vincularla así:

  

o

  

Esto se unirá al elemento actual en la lista. (Asumiendo PersonNames es una lista de cadenas). De lo contrario, verá el nombre de la clase en la lista

Si el origen de los elementos es enumerable como entradas de cadena, use lo siguiente:

  

Puedes usar esta syntax en cualquier objeto. Generalmente, el método ToString () se llamará para obtener el valor. Esto es en muchos casos muy útil. Pero ten cuidado de que no se produzca ninguna notificación de cambio.

Puede hacerlo sin tener que definir explícitamente el control TextBlock como parte de su ListBox (a menos que desee un mejor formateo). El truco para lograr que el enlace se dispare es utilizar una ObservableCollection lugar de una List

Window1.xaml

  

Window1.xaml.cs

 public Window1() { InitializeComponent(); DataContext = this; // Need to initialize this, otherwise you get a null exception MyListViewBinding = new ObservableCollection(); } public ObservableCollection MyListViewBinding { get; set; } // Add an item to the list private void Button_Click_Add(object sender, RoutedEventArgs e) { // Custom control for entering a single string SingleEntryDialog _Dlg = new SingleEntryDialog(); // OutputBox is a string property of the custom control if ((bool)_Dlg.ShowDialog()) MyListViewBinding.Add(_Dlg.OutputBox.Trim()); }