Search code examples
c#windows-phone-8itemscontrol

C# Windows Phone ItemsControl empty


I'm trying to fill a view with my datas using an ItemsControl. I set bindings and values but the view is empty.

This is my xaml:

        <phone:PanoramaItem Header="lettura" 
                                    x:Name="nuovaLettura"
                                    Tag="nuovaLettura">
            <phone:PanoramaItem.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}" 
                             FontSize="56" Margin="0, 10"/>
                </DataTemplate>
            </phone:PanoramaItem.HeaderTemplate>
            <ItemsControl ItemsSource="{Binding lskLetture}" x:Name="lettureControl">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Border BorderThickness="1"
                             BorderBrush="Brown" 
                                Background="Transparent">
                            <StackPanel Orientation="Vertical">
                                <TextBlock
                                    Margin="12, 0, 0, -5"
                                    Text="Nome lettura"
                                    FontSize="18" />
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="Auto"/>
                                    </Grid.ColumnDefinitions>
                                    <Button IsEnabled="False" 
                                         Grid.Column="0" 
                                         Grid.Row="0"
                                         Content="{Binding tipoLettura}"/>
                                    <TextBlock Text="*" 
                                         Foreground="Red"
                                         Grid.Column="1"
                                         Grid.Row="0"
                                         Visibility="{Binding visibilitàObbligatorio}"/>
                                </Grid>

                                <TextBlock
                                    Margin="12, 0, 0, -5"
                                    Text="Data lettura"
                                    FontSize="18" />
                                <toolkit:DatePicker IsEnabled="False" 
                                      Value="{Binding dataLettura}"/>

                                <TextBlock
                                    Margin="12, 0, 0, -5"
                                    Text="Esito lettura"
                                    FontSize="18"
                                    />
                                <toolkit:ListPicker IsEnabled="False"
                                            ItemsSource="{Binding scelte}"
                                            Visibility="{Binding visibilitàScelte}"/>
                                <TextBox FontSize="18" 
                                         IsEnabled="False"
                                         x:Name="valoreLettura"
                                         Text="{Binding valoreLettura}" 
                                         Visibility="{Binding visibilitàNonScelte}"/>

                                <TextBlock
                                    Margin="12, 0, 0, -5"
                                    Text="Note"
                                    FontSize="18" />
                                <TextBox FontSize="18" 
                                    MinHeight="50" 
                                    x:Name="noteLettura" 
                                    Text="{Binding note}"/>

                            </StackPanel>
                        </Border>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </phone:PanoramaItem>

and it's filled by the .cs file with this code:

    private List<LETTURA> lettureOriginali;
    public ObservableCollection<LSK_LETTURA> lskLetture;

    public class LSK_LETTURA
    {
        public Guid id { get; set; }
        public Guid idInt { get; set; }
        public Guid idTipologiaLettura { get; set; }
        public string tipologiaLettura{ get; set; }
        public DateTime? dataLettura { get; set; }
        public List<string> scelte { get; set; }
        public string valoreLettura { get; set; }
        public string note { get; set; }
        public string visibilitàObbligatorio { get; set; }
        public string visibilitàScelte { get; set; }
        public string visibilitàNonScelte { get; set; }

    }

    private void CreaOggettoLettura()
    {
        lettureOriginali = new LETTURA().SelectByInt(intervento.ID);
        lskLetture = new ObservableCollection<LSK_LETTURA>();

        foreach (LETTURA l in lettureOriginali)
        {
            var tipologiaLettura = new TIPOLOGIA_LETTURA().SelectById(l.ID_TIPO_LETTURA);
            lskLetture.Add(new LSK_LETTURA()
            {
                id = l.ID,
                idInt = l.ID_INT,
                idTipologiaLettura = tipologiaLettura.ID,
                tipologiaLettura = tipologiaLettura.NOME,
                dataLettura = l.DATA_LETTURA ?? DateTime.Today,
                note = l.NOTE,
                scelte = tipologiaLettura.UNITA_MISURA == "Lista di scelte" ? new List<string>() : tipologiaLettura.POSSIBILI_VALORI.Split(',').ToList(),
                valoreLettura = l.VALORE_LETTURA,
                visibilitàObbligatorio = l.OBBLIGATORIO ? "Visible" : "Collapsed",
                visibilitàScelte = tipologiaLettura.UNITA_MISURA == "Lista di scelte" ? "Visible" : "Collapsed",
                visibilitàNonScelte = tipologiaLettura.UNITA_MISURA == "Lista di scelte" ? "Collapsed" : "Visible"
            });
        }
        lettureControl.UpdateLayout();
    }

The page is currently displayed without any error, but it is empty. no textblocks and no views are visible.

What I'm missing?


Solution

  • Try changing your ObservableCollection to a property, and not a public field.

    Old:

    public ObservableCollection<LSK_LETTURA> lskLetture;
    

    New (Edited solution which fixed the problem):

    public ObservableCollection<LSK_LETTURA> lskLetture;
    public ObservableCollection<LSK_LETTURA> getLskLetture  
    {
        get
        {
            return lskLetture;
        }
        set
        {
            lskLetture = value;
        }
    }
    

    And you must bind on the getLskLetture object

    Bindings don't work on fields, only on properties.