Desde el inicio en WPF todavía estoy luchando para entender la funcionalidad de enlace de datos.

Estoy tratando de usar un multi columna de cuadro de lista y mi XAMl se parece a esto:

<ListBox Name="RecordList">
    <ListView Name="RecordListView">
        <ListView.View>
             <GridView>
                <GridView.Columns>
                     <GridViewColumn Header="1" Width="Auto" DisplayMemberBinding="{Binding Path=Field1}" />
                     <GridViewColumn Header="2" Width="50" DisplayMemberBinding="{Binding Path=Field2}" />
                     <GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding Path=Field3}" />
                </GridView.Columns>
           </GridView>
      </ListView.View>
 </ListView>
</ListBox>

Yo simplemente no puede obtener el código de c# a la derecha para rellenar los elementos de mi lista?

InformationsquelleAutor MattP | 2011-03-07

2 Comentarios

  1. 13

    Aquí es la forma en que encaja en una cáscara de nuez.

    Primer lugar, definir un modelo que contiene los datos para la unión.

    public sealed class MyListBoxItem
    {
      public string Field1 {get;set;}
      public string Field2 {get;set;}
      public string Field3 {get;set;}
    }

    Ahora, usted tiene que tener una clase que contenga estos modelos para la unión. Este tipo es a menudo llamado el ViewModel; se presenta la información a la Vista para la unión según la entrada del usuario desde el punto de Vista. Sus propiedades públicas son típicamente ObservableCollections y DependencyProperties de modo que los cambios en el ViewModel será recogido por la Vista (la interfaz de usuario):

    public sealed class MyViewModel
    {
      public ObservableCollection<MylistBoxItem> Items {get;private set;}
      public MyViewModel()
      {
        Items = new ObservableCollection<MyListBoxItem>();
        Items.Add(new MyListBoxItem{Field1="One", Field2="Two",Filed3="Three"};
      }
    }

    Dentro del código subyacente para su interfaz de usuario, el «punto de Vista», se crea la instancia de su ViewModel y establecido como el DataContext para la Vista.

    public MyView()
    {
      this.DataContext = new MyViewModel();
    }

    esto es importante ya que el DataContext «fluye» a través del árbol visual. Está disponible para cada niño elemento en el que está establecido.

    Para mostrar los artículos, que debe enlazar el ItemsSource de la ListView a los Elementos de propiedad de la DataContext (esto se entiende). Cada fila dentro del ListView tiene su DataContext para cada individuo MyViewModel en la propiedad Items. Así que debe enlazar cada miembro de la pantalla de las propiedades de las MyListBoxItem.

    <ListView Name="RecordListView" ItemsSource="{Binding Items}">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn Header="1" Width="Auto" DisplayMemberBinding="{Binding Path=Field1}" />
                    <GridViewColumn Header="2" Width="50" DisplayMemberBinding="{Binding Path=Field2}" />
                    <GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding Path=Field3}" />
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

    Para entender todo este proceso mejor, la búsqueda de la alta calificación de las preguntas aquí etiquetado [MVVM].

    TAMBIÉN, para ayudar a depurar los enlaces, configurar la depuración para el detallado de enlace de datos:
    WPF Lista de enlace a la Multi-Columna ListBox

    • +1 Muy descriptivo…sin duda ayuda.Pero aún así, recomiendo a sentar las bases,se pondrá bien versado con el enlace de datos y datatemplates,y luego ir por MVVM
    • Gracias por una respuesta exhaustiva, he creado el ViewModel y se esta trabajando. Hay una manera para «Refrescar» la Perspective / lista de Elementos en eventos como este código está conectado a una base de datos que se actualiza en tiempo real y la necesito para reflejar estos cambios en la pantalla
    • suena como que usted quiere crear un DispatcherTimer en el modelo de vista. Usted puede responder a su evento Tick y actualización de las propiedades públicas de la ViewModel en respuesta. Sus propiedades se deben propagar notificaciones de actualización por ser DependencyProperties, ObservableCollections o por la máquina virtual de la aplicación de INotifyPropertyChanged. Además, tendrás que ser consciente de los problemas de la actualización de la interfaz de usuario de un subproceso en segundo plano (el evento Tick no fuego en el subproceso de interfaz de usuario). Todos estos temas se puede encontrar aquí.
    • tienes razón, por supuesto. Yo creo que el patrón MVVM es muy importante entender y se debe aprender cuanto antes cuando el desarrollo de las aplicaciones de WPF. Mucha gente viene a WPF de winforms/webforms/no de fondo y terminan en el código subyacente infierno. Una sola línea de código xaml puede tomar veinte extremadamente oscuras líneas de código para realizar; evitando de esta trampa en los momentos iniciales deben ser alentados.
  2. 4

    Usted no tiene que utilizar tanto el cuadro de lista y la vista de lista.Ya sea que usted utilice un listbox con datatemplates o el uso de un listview con su gridviewcolumns.

    Comprobar los enlaces de abajo para averiguar cómo llenar un listbox correctamente

    http://www.c-sharpcorner.com/uploadfile/mahesh/wpflistbox08252008100659am/wpflistbox.aspx

    http://www.wpftutorial.net/ListBoxDataTemplate.html

    http://www.codeproject.com/KB/WPF/CustomListBoxLayoutInWPF.aspx

    Recomiendo que para ir a través de los enlaces de abajo y agarrar una base sólida sobre el enlace de datos y datatemplateing en wpf

    http://msdn.microsoft.com/en-us/library/ms742521.aspx

    http://www.codeproject.com/KB/WPF/GuidedTourWPF_4.aspx

    http://www.wpftutorial.net/DataTemplates.html

    • Y también mantener esta XAML unión cheatsheet de referencia: nbdtech.com/Free/WpfBinding.pdf
    • Gracias, una buena lectura allí. Gracias Shahid para el cheatsheet demasiado.

Dejar respuesta

Please enter your comment!
Please enter your name here