RadListView ItemsSource Do not refresh

1 Answer 504 Views
ListView
盼宇
Top achievements
Rank 1
Iron
盼宇 asked on 11 Mar 2022, 03:16 AM

Dear brothers and sisters:

Please help me

There are two stacklayouts in my page. I use radsegmentedcontrol to control their isvisible attribute when switching. When switching, I add a piece of data to the radlistview in stacklayout. When I switch for the first time, I can add data and display it, but when switching for the second time, the data is added into itemssource, and the front page does not display new data

Here is my code,Attached is my video

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:telerikInput="clr-namespace:Telerik.XamarinForms.Input;assembly=Telerik.XamarinForms.Input" 
             xmlns:telerikDataControls="clr-namespace:Telerik.XamarinForms.DataControls;assembly=Telerik.XamarinForms.DataControls" 
             xmlns:telerikListView="clr-namespace:Telerik.XamarinForms.DataControls.ListView;assembly=Telerik.XamarinForms.DataControls" xmlns:local="clr-namespace:LogbotWMSApps.ViewModel" xmlns:telerikPrimitives="clr-namespace:Telerik.XamarinForms.Primitives;assembly=Telerik.XamarinForms.Primitives"
             x:Class="LogbotWMSApps.Views.AssignTasksPage">

    <ContentPage.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../Themes/AssignTasksStyles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </ContentPage.Resources>


    <ContentPage.Content>
        <StackLayout>
            <telerikInput:RadSegmentedControl x:Name="segmentControlText"
                              HeightRequest="40"
                              VerticalOptions="Start" SelectedIndex="0" SegmentBackgroundColor="AliceBlue" SelectedSegmentBackgroundColor="DodgerBlue" SelectionChanged="segmentControlText_SelectionChanged">
                <telerikInput:RadSegmentedControl.ItemsSource>
                    <x:Array Type="{x:Type x:String}">
                        <x:String>Group1</x:String>
                        <x:String>Group2</x:String>
                    </x:Array>
                </telerikInput:RadSegmentedControl.ItemsSource>
            </telerikInput:RadSegmentedControl>

            <StackLayout x:Name="FirstStackLayout" IsVisible="true">

                <StackLayout>
                <telerikDataControls:RadListView x:Name="listView" ItemsSource="{Binding Source}" SelectionChanged="listView_SelectionChanged">
                    <telerikDataControls:RadListView.BindingContext>
                        <local:AssignTaskModel />
                    </telerikDataControls:RadListView.BindingContext>
                    <telerikDataControls:RadListView.ItemTemplate>
                        <DataTemplate>
                            <telerikListView:ListViewTemplateCell>
                                <telerikListView:ListViewTemplateCell.View>
                                    <Grid BackgroundColor="AliceBlue" Margin="0,1">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="5*"></ColumnDefinition>
                                            <ColumnDefinition Width="5*"></ColumnDefinition>
                                        </Grid.ColumnDefinitions>
                                        <Label Margin="20,10" Text="{Binding TaskType}" />
                                        <Label Grid.Column="1" Margin="10" Text="{Binding TaskCode}" />
                                    </Grid>
                                </telerikListView:ListViewTemplateCell.View>
                            </telerikListView:ListViewTemplateCell>
                        </DataTemplate>
                    </telerikDataControls:RadListView.ItemTemplate>
                </telerikDataControls:RadListView>
                </StackLayout>
                
            </StackLayout>
            <StackLayout x:Name="SecondStackLayout" IsVisible="false">
                
                <StackLayout>
                    <telerikDataControls:RadListView x:Name="RecordListView" ItemsSource="{Binding AssignTaskRecords}" SelectionChanged="RecordListView_SelectionChanged">
                        <telerikDataControls:RadListView.BindingContext>
                            <local:TaskDistributionRecord />
                        </telerikDataControls:RadListView.BindingContext>
                        <telerikDataControls:RadListView.ItemTemplate>
                            <DataTemplate>
                                <telerikListView:ListViewTemplateCell>
                                    <telerikListView:ListViewTemplateCell.View>
                                        <Grid BackgroundColor="AliceBlue" Margin="0,1">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="5*"></ColumnDefinition>
                                                <ColumnDefinition Width="5*"></ColumnDefinition>
                                            </Grid.ColumnDefinitions>
                                            <Label Margin="20,10" Text="{Binding TaskType}" />
                                            <Label Grid.Column="1" Margin="10" Text="{Binding TaskCode}" />
                                        </Grid>
                                    </telerikListView:ListViewTemplateCell.View>
                                </telerikListView:ListViewTemplateCell>
                            </DataTemplate>
                        </telerikDataControls:RadListView.ItemTemplate>
                    </telerikDataControls:RadListView>
                </StackLayout>
            </StackLayout>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

 

 

1 Answer, 1 is accepted

Sort by
0
Didi
Telerik team
answered on 11 Mar 2022, 09:01 AM

Hello,

The behavior is expected as the ListView is inside StackLayout. For more details check this topic: https://docs.telerik.com/devtools/xamarin/troubleshooting/controls-are-not-appearing 

Solution:
The Page xaml definition:

<ContentPage.Content>
    <Grid RowDefinitions="Auto,*">

        <telerikInput:RadSegmentedControl x:Name="segmentControlText"
                            HeightRequest="40"
                            VerticalOptions="Start" SelectedIndex="0" 
                                            SegmentBackgroundColor="AliceBlue" 
                                            SelectedSegmentBackgroundColor="DodgerBlue"
                                            SelectionChanged="segmentControlText_SelectionChanged">
            <telerikInput:RadSegmentedControl.ItemsSource>
                <x:Array Type="{x:Type x:String}">
                    <x:String>Group1</x:String>
                    <x:String>Group2</x:String>
                </x:Array>
            </telerikInput:RadSegmentedControl.ItemsSource>
        </telerikInput:RadSegmentedControl>

        <Grid x:Name="FirstStackLayout" Grid.Row="1">

            <telerikDataControls:RadListView x:Name="listView" ItemsSource="{Binding Source}" IsVisible="true">
                <telerikDataControls:RadListView.ItemTemplate>
                    <DataTemplate>
                        <telerikListView:ListViewTemplateCell>
                            <telerikListView:ListViewTemplateCell.View>
                                <Grid BackgroundColor="AliceBlue" Margin="0,1">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="5*"></ColumnDefinition>
                                        <ColumnDefinition Width="5*"></ColumnDefinition>
                                    </Grid.ColumnDefinitions>
                                    <Label Margin="20,10" Text="{Binding Title}" />
                                    <Label Grid.Column="1" Margin="10" Text="{Binding Author}" />
                                </Grid>
                            </telerikListView:ListViewTemplateCell.View>
                        </telerikListView:ListViewTemplateCell>
                    </DataTemplate>
                </telerikDataControls:RadListView.ItemTemplate>
            </telerikDataControls:RadListView>

            <telerikDataControls:RadListView x:Name="RecordListView" ItemsSource="{Binding Source}" IsVisible="false">
                <telerikDataControls:RadListView.ItemTemplate>
                    <DataTemplate>
                        <telerikListView:ListViewTemplateCell>
                            <telerikListView:ListViewTemplateCell.View>
                                <Grid BackgroundColor="LightGreen" Margin="0,1">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="5*"></ColumnDefinition>
                                        <ColumnDefinition Width="5*"></ColumnDefinition>
                                    </Grid.ColumnDefinitions>
                                    <Label Margin="20,10" Text="{Binding Title}" />
                                    <Label Grid.Column="1" Margin="10" Text="{Binding Author}" />
                                </Grid>
                            </telerikListView:ListViewTemplateCell.View>
                        </telerikListView:ListViewTemplateCell>
                    </DataTemplate>
                </telerikDataControls:RadListView.ItemTemplate>
            </telerikDataControls:RadListView>
        </Grid>
    </Grid>
</ContentPage.Content>

and the code behind: 

public partial class MainPage : ContentPage
{
    ViewModel vm;
    public MainPage()
    {
        InitializeComponent();
        this.vm = new ViewModel();
        this.BindingContext = vm;
    }

    private void segmentControlText_SelectionChanged(object sender, Telerik.XamarinForms.Common.ValueChangedEventArgs<int> e)
    {
        var str = DateTime.Now.ToString();

        switch (e.NewValue)
        {
            case 0:
                listView.IsVisible = true;
                RecordListView.IsVisible = false;
                Device.BeginInvokeOnMainThread(()=> {
                    this.vm.Source.Add(new Book { Title = "trwetwe", Author = "gergerger" });
                });
                break;
            case 1:
                listView.IsVisible = false;
                RecordListView.IsVisible = true;
                this.vm.Source.Add(new Book { Title = "11111twe", Author = "2222222222gergerger" });
                break;
        }
    }
}

Regards,
Didi
Progress Telerik

Virtual Classroom, the free self-paced technical training that gets you up to speed with Telerik and Kendo UI products quickly just got a fresh new look + new and improved content including a brand new Blazor course! Check it out at https://learn.telerik.com/.

Tags
ListView
Asked by
盼宇
Top achievements
Rank 1
Iron
Answers by
Didi
Telerik team
Share this question
or