none
Cargar datos a un listview RRS feed

  • Pregunta

  • Tengo un listview pero que esta hecho de manera estática lo que necesito es generarlo igual pero mediante código.

     

      <ListView ItemsSource="{Binding}" SelectionChanged="ListView_SelectionChanged" Margin="0,46,0,0">
          <ListView.View>
            <controls:CalendarView ItemBeginBinding="{Binding Path=Start}" ItemEndBinding="{Binding Path=Finish}"  >
              <controls:CalendarView.Periods >
                <controls:CalendarViewPeriod Begin="{Binding Path=Begin}" End="{Binding Path=End}" Header="{Binding Path=Header}"></controls:CalendarViewPeriod>
                <controls:CalendarViewPeriod Begin="{Binding Path=Begin}" End="{Binding Path=End}" Header="{Binding Path=Header}"></controls:CalendarViewPeriod>
                <controls:CalendarViewPeriod Begin="{Binding Path=Begin}" End="{Binding Path=End}" Header="{Binding Path=Header}"></controls:CalendarViewPeriod>
                <controls:CalendarViewPeriod Begin="{Binding Path=Begin}" End="{Binding Path=End}" Header="{Binding Path=Header}"></controls:CalendarViewPeriod>
                <controls:CalendarViewPeriod Begin="{Binding Path=Begin}" End="{Binding Path=End}" Header="{Binding Path=Header}"></controls:CalendarViewPeriod>
                <controls:CalendarViewPeriod Begin="{Binding Path=Begin}" End="{Binding Path=End}" Header="{Binding Path=Header}"></controls:CalendarViewPeriod>
    <controls:CalendarViewPeriod Begin="{Binding Path=Begin}" End="{Binding Path=End}" Header="{Binding Path=Header}"></controls:CalendarViewPeriod>
              
              </controls:CalendarView.Periods>
                <!-- <controls:CalendarView.Periods>
                <controls:CalendarViewPeriod Begin="03/02/2009 0:00 " End="03/02/2009 23:59" Header="Monday" />
                <controls:CalendarViewPeriod Begin="03/03/2009 12:00 AM" End="03/03/2009 8:00 AM" Header="Tuesday" />
                <controls:CalendarViewPeriod Begin="03/04/2009 12:00 AM" End="03/04/2009 8:00 AM" Header="Wednesday" />
                <controls:CalendarViewPeriod Begin="03/05/2009 12:00 AM" End="03/05/2009 8:00 AM" Header="Thursday" />
                <controls:CalendarViewPeriod Begin="03/06/2009 12:00 AM" End="03/06/2009 8:00 AM" Header="Friday" />
                <controls:CalendarViewPeriod Begin="03/07/2009 12:00 AM" End="03/06/2009 8:00 AM" Header="Sabado" />
                <controls:CalendarViewPeriod Begin="03/08/2009 12:00 AM" End="03/06/2009 8:00 AM" Header="Domingo" />
    
    
              </controls:CalendarView.Periods> -->
            </controls:CalendarView>
          </ListView.View>
         <ListView.Items >
            <!--    <local:Appointment Start="03/03/2009 2:00 AM" Finish="03/03/2009 10:00 AM" Subject="Sub" Location="Location" Organizer="Organizer"></local:Appointment>-->
               <local:Appointment Start="{Binding Start}" Finish="{Binding Finish}" Subject="{Binding Subject}" Location="{Binding Location}" Organizer="{Binding Organizer}"></local:Appointment>
         
            </ListView.Items> 
          <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
              <Style.Setters>
                <Setter Property="Template">
                  <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                      <Border BorderBrush="#5076A7" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
                        <Border.Background>
                          <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <GradientStop Color="#FFFFFF" Offset="0.0" />
                            <GradientStop Color="#C0D3EA" Offset="1.0" />
                          </LinearGradientBrush>
                        </Border.Background>
                        <StackPanel TextElement.FontFamily="Segoe UI" TextElement.FontSize="12">
                          <TextBlock FontWeight="Bold" Padding="3,0,0,0" Text="{Binding Path=Subject}" />
                          <TextBlock Padding="3,0,0,0" Text="{Binding Path=Location}" />
                          <TextBlock Padding="3,0,0,0" Text="{Binding Path=Organizer}" />
                        </StackPanel>
                      </Border>
                    </ControlTemplate>
                  </Setter.Value>
                </Setter>
              </Style.Setters>
            </Style>
          </ListView.ItemContainerStyle>
        </ListView>
      
    
    Lo que aparece comentado es lo que se genera y se genera bien, pero lo que yo necesito es generar eso mismo mediante codigo
    
    el codigo mio es el siguiente
    
    <pre lang="x-c#"> public partial class CalendarViewWindow : Window
      {
        ObservableCollection<CalendarViewPeriod> guests = new ObservableCollection<CalendarViewPeriod>();
        ObservableCollection<Appointment> apoint = new ObservableCollection<Appointment>(); 
      
        public CalendarViewWindow()
        {
      
          InitializeComponent();
          funcion();
          funcion2();
        }
    
    
        private void ListView_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
    
        }
    
        private void button1_Click(object sender, System.Windows.RoutedEventArgs e)
        {
          funcion();
          funcion2();
        }
        private void funcion()
        {
          DataContext = guests;
    
          guests.Add(new CalendarViewPeriod()
          {
            Begin = new DateTime(2009, 03, 02, 01, 00, 00),
            End = new DateTime(2009, 03, 02, 23, 00, 00),
            Header = "Cabeza",
    
          });
          DataContext = guests;
    
          guests.Add(new CalendarViewPeriod()
          {
            Begin = new DateTime(2009, 03, 03, 01, 00, 00),
            End = new DateTime(2009, 03, 03, 23, 00, 00),
            Header = "Cabeza",
    
          });
          
        }
    
        private void funcion2()
        {
          DataContext = apoint;
    
          apoint.Add(new Appointment()
          {
             Finish= new DateTime(2009, 03, 02, 10, 00, 00),
             Start = new DateTime(2009, 03, 02, 09 , 00, 00),
             Location = "Cabeza",
             Organizer = "Organizer",
              Subject = "Subj"
              
          });
    
    
          apoint.Add(new Appointment()
          {
            Finish = new DateTime(2009, 03, 03, 10, 00, 00),
            Start = new DateTime(2009, 03, 03, 13, 00, 00),
            Location = "Cabeza",
            Organizer = "Organizer",
            Subject = "Subj"
              
    
          });
    
        }
       
      }
    }
    
    

    He revisado varios ejemplos y creo que lo estoy haciendo bien pero quizas se pueda hacer de otra manera mostrar datos en un listview
    Saludos y Gracias
    

    martes, 19 de julio de 2011 4:55

Respuestas

  • Hola Ricardo.

    En este otro post comentaba la forma de enlazar datos mediante codigo .cs o mediante los resources de .xaml:

    http://social.msdn.microsoft.com/Forums/es-ES/wpfes/thread/3508a5d7-df96-47d3-b809-2f218323b4bf

    echale un vistazo y cuentas que tal.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta Ricardo_1984 jueves, 21 de julio de 2011 15:01
    martes, 19 de julio de 2011 6:36
  • Hola Ricardo.

    En un principio, es posible que se dupliquen datos, ademas no es ni optimo ni elegante, en este caso yo entiendo la siguiente jerarquia de modelos:

    Modelo Dias:

    -Start

    -Finish

    -Periodos[]

    Modelo Periodos

    -Begin

    -End

    -Header

    No se si esto es correcto con esas propiedades, pero la idea es tener un modelo con los dias y ese modelo a su vez que contenga un vector de modelos con los periodos de cada dia.

    De esta forma puedes enlazar el modelo padre con los dias y ya tienes toda la jerarquia interna.

    ¿que control estas usando para esto?, Es posible que la propiedad CalendarView.Periods tenga una propiedad de binding donde se insertaria el vector del modelo dias teniendo todo el sistema implementado.

     

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Marcado como respuesta Ricardo_1984 jueves, 21 de julio de 2011 15:01
    miércoles, 20 de julio de 2011 16:14

Todas las respuestas

  • Hola Ricardo.

    En este otro post comentaba la forma de enlazar datos mediante codigo .cs o mediante los resources de .xaml:

    http://social.msdn.microsoft.com/Forums/es-ES/wpfes/thread/3508a5d7-df96-47d3-b809-2f218323b4bf

    echale un vistazo y cuentas que tal.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta Ricardo_1984 jueves, 21 de julio de 2011 15:01
    martes, 19 de julio de 2011 6:36
  • Hola David, Muchas gracias por responder la verdad que los item lei el post anterior y me di cuenta el error que tenia en la segunda parte de mi problema y funciona bien sin problema, pero la primera parte no he podido solucionar.

     

    El código es el siguiente;

     <ListView.View>
            <controls:CalendarView ItemBeginBinding="{Binding Path=Start}" ItemEndBinding="{Binding Path=Finish}">
              <controls:CalendarView.Periods>
                <controls:CalendarViewPeriod Begin="03/02/2009 01:00 " End="03/02/2009 23:59 " Header="Monday" />
                <controls:CalendarViewPeriod Begin="03/03/2009 01:00 " End="03/03/2009 23:59 " Header="Tuesday" />
                <controls:CalendarViewPeriod Begin="03/04/2009 01:00 " End="03/04/2009 23:59 " Header="Wednesday" />
                <controls:CalendarViewPeriod Begin="03/05/2009 01:00 " End="03/05/2009 23:59 " Header="Thursday" />
                <controls:CalendarViewPeriod Begin="03/06/2009 01:00 " End="03/06/2009 23:59 " Header="Friday" />
              </controls:CalendarView.Periods>
            </controls:CalendarView>
          </ListView.View>
    


    En realidad necesito dos Binding uno que se llena en los item sobre que hora tiene cada persona, y el segundo que me muestre los dias Inicio, Final y El Header nada mas que eso.

    Pero como puedo ocupar dos Itemsource ?

     

    Gracias por su tiempo

    martes, 19 de julio de 2011 13:24
  • Hola Ricardo.

    Si haces lo que creo, me da la impresion de que lo estas resolviendo mal. En un principio no puedes ocupar 2 ItemSource, pero si que te puedes crear tu propio modelo, en el ejemplo veo que estas usando un CalendarViewPeriod y Appointment, pero lo ideal seria y ya que es tu propio contexto de datos, que te crees tu modelo personalizado con los datos que necesites para cada item, de modo que podrias tener un modelo con las siguientes propiedades:

    Start, Finish, Begin, End y Header y tan solo tienes que crear la coleccion de este tipo y establecerla como ItemSource, de modo que tengas 5 propiedades para enlazar.

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 19 de julio de 2011 16:50
  • Hola David, Tambien pense lo mismo pero creo que tengo un pequeño problema contextual, nose si se podra crear.

    Necesito crear una agenda de citas, pero el problema es que si pongo una semana son 7 días, pero dentro de esos 7 días existen 20 citas pòr ejemplo. entonces el Begin y el End podria ingresarlo 7 veces que son las que corresponde desde el día Lunes hasta el Domingo y ademas llenar 20 Start, Finish, Subject y Location . no existe problema

     

    Disculpen mi ignorancia pero siempre he trabajo mas en Asp.Net y esto es para muy nuevo

     

    Gracias y Saludos.

    miércoles, 20 de julio de 2011 13:03
  • Hola Ricardo.

    En un principio, es posible que se dupliquen datos, ademas no es ni optimo ni elegante, en este caso yo entiendo la siguiente jerarquia de modelos:

    Modelo Dias:

    -Start

    -Finish

    -Periodos[]

    Modelo Periodos

    -Begin

    -End

    -Header

    No se si esto es correcto con esas propiedades, pero la idea es tener un modelo con los dias y ese modelo a su vez que contenga un vector de modelos con los periodos de cada dia.

    De esta forma puedes enlazar el modelo padre con los dias y ya tienes toda la jerarquia interna.

    ¿que control estas usando para esto?, Es posible que la propiedad CalendarView.Periods tenga una propiedad de binding donde se insertaria el vector del modelo dias teniendo todo el sistema implementado.

     

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Marcado como respuesta Ricardo_1984 jueves, 21 de julio de 2011 15:01
    miércoles, 20 de julio de 2011 16:14
  • Gracias , ya capte la idea Saludos.
    jueves, 21 de julio de 2011 15:02