Search code examples
xamluwpwindows-10-mobile

UWP ListView not data


I have a ListView defined like this:

<ListView x:Name="phonesListView" 
                     Grid.Row="5"
                     Background="Black"
                     IsItemClickEnabled="True"
                     Foreground="Gray" >

                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="ListViewItem">
                                    <Grid>
                                        <Border x:Name="myback" Background="Transparent">
                                            <ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Margin="20, 0, 20, 0"/>
                                        </Border>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ListView.ItemContainerStyle>

                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid Width="auto" HorizontalAlignment="Stretch">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>

                            <Grid 
                            Grid.Row="0">
                                <Grid.ColumnDefinitions >
                                    <ColumnDefinition Width="3*" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>

                                <ComboBox 
                                    Grid.Column="0"
                                    VerticalAlignment="Center"
                                    Background="Black"
                                    Foreground="White" >        
                                    <ComboBoxItem Content="Home" IsSelected="True"/>
                                    <ComboBoxItem Content="Work"/>
                                    <ComboBoxItem Content="Office"/>
                                    <ComboBoxItem Content="Fax"/>
                                    <ComboBoxItem Content="School"/>
                                </ComboBox>

                                <Button
                                    Grid.Column="1"
                                    Height="30"
                                    Width="30"
                                    Foreground="Black"
                                    Margin="0, 5, 0, 5"
                                    HorizontalAlignment="Center" Click="RemovePhone">   
                                    <Button.Background>
                                        <ImageBrush Stretch="Fill" ImageSource="Assets/appbar.close.png" />
                                    </Button.Background>
                                </Button>

                            </Grid>

                            <TextBox
                                Grid.Row="1"
                                Background="White"
                                Foreground="Black"
                                FontSize="18"
                                Text="{Binding Number}"
                                InputScope="TelephoneNumber" />

                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>

            </ListView>

In code i have attribute:

ObservableCollection<Phone> phones = new ObservableCollection<Phone>();

Everything works fine, I can add and delete items in list view by either

phones.Add or phones.Remove

The problem is for when I'm leaving a page or Save button is pressed the count of this collections is exactly it is supposed to be but there are no data i have filled in input field. Could you help me with that? Thanks.


Solution

  • If you want that the edited data in your ListView flows back to the items so you can save the edits, you'll have to use 2-way binding. When the control (in the sample below your TextBox) loses focus, the value of Text property gets stored back into the bound field (in your sample Number).

    <TextBox
        Grid.Row="1"
        Background="White"
        Foreground="Black"
        FontSize="18"
        Text="{Binding Number, Mode=TwoWay}"
        InputScope="TelephoneNumber" />
    

    For more details about binding, read the MSDN article.