【问题标题】:I update ObservableCollection List but UI is not updating issue from Tab Page我更新了 ObservableCollection 列表,但 UI 没有从标签页更新问题
【发布时间】:2020-02-29 07:43:45
【问题描述】:

我更新了 ObservableCollection 列表,但 UI 没有从标签页更新 我还清除了列表然后分配新列表,列表的值发生了变化,但 UI 没有更新

public ObservableCollection<Dashboard> DetailsList { get; set; } = new ObservableCollection<Dashboard>();
    //API Call
    details = await _clientAPI.getDashboardDetails(id);
    if (details != null)
    {
        DetailsList.Clear();
        foreach (var item in details)
        {
            DetailsList.Add(item);
        }
    }

【问题讨论】:

    标签: c# xamarin xamarin.forms observablecollection


    【解决方案1】:

    我认为您错过了绑定上下文。添加下面的代码。

      this.BindingContext = this;
    

    我制作了一个代码示例供您参考。我不确定你的模型是什么,我用一个简单的模型来测试。

    Page1.xaml.cs

     public partial class Page1 : ContentPage
    {
        public ObservableCollection<Dashboard> DetailsList { get; set; }
        public Page1()
        {
            InitializeComponent();
    
            DetailsList = new ObservableCollection<Dashboard>()
            {
                new Dashboard(){ Name="AA", Country="CountryA"},
                new Dashboard(){ Name="BB", Country="CountryB"},
    
            };
            this.BindingContext = this;
    
        }
    
        private void btnUpdate_Clicked(object sender, EventArgs e)
        {
            List<Dashboard> details = new List<Dashboard>();
            details.Add(new Dashboard() { Name = "CC", Country = "CountryC" });
            details.Add(new Dashboard() { Name = "DD", Country = "CountryD" });
    
            if (details != null)
            {
                DetailsList.Clear();
                foreach (var item in details)
                {
                    DetailsList.Add(item);
                }
            }
        }
    }
    public class Dashboard
    {
        public string Name { get; set; }
        public string Country { get; set; }
    
    }
    

    Xaml:

       <ContentPage.Content>
        <StackLayout>
            <Button
                x:Name="btnUpdate"
                Clicked="btnUpdate_Clicked"
                Text="Update" />
            <ListView ItemsSource="{Binding DetailsList}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout Orientation="Horizontal">
                                <Label Text="{Binding Name}" />
                                <Label Text="{Binding Country}" />
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage.Content>
    

    更新:

    【讨论】:

    • 这在普通页面中运行良好,但在标签页中它不起作用
    • 我在标签页上测试的相同代码,效果很好。
    【解决方案2】:
    public ObservableCollection<Dashboard> DetailsList { get; set; } = new ObservableCollection<Dashboard>();
        //API Call
        details = await _clientAPI.getDashboardDetails(id);
        if (details != null)
        {
            DetailsList.Clear();
            foreach (var item in details)
            {
                DetailsList.Add(item);
            }
        }
    
        YourGridView.ItemSource =DetailsList;
    

    YourGridView.ItemSource =DetailsList

    您缺少这一行。这段代码 - 它只是将 ObservableCollection 分配给 gridview(您想要显示数据)

    谢谢!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      相关资源
      最近更新 更多