【问题标题】:Dynamic Presentation of Label as per the Data coming from web services Xamarin Forms根据来自 Web 服务 Xamarin 表单的数据动态显示标签
【发布时间】:2019-04-19 07:16:50
【问题描述】:

我正在尝试在框架内呈现信息列表,来自数据库的信息分为两部分,即“描述”:“值” 所以列表中的行使我组描述和价值,有些可能没有

所以任何人都可以帮助我如何根据我从我的服务获得的数据将标签添加到网格或堆栈,因为它有时可能是 3,有时可能是 5,创建标签和绑定它们将是静态的工作

【问题讨论】:

  • 您可以使用 stacklayout 并在其中放置所有标签并根据数据设置可见性。
  • 你需要用c#而不是xaml来设计这个,来实现这个。
  • 您可以做的是采用一个堆栈布局[父布局],然后根据您的响应,根据您的要求在该布局中添加子元素。
  • @MShah 我正在尝试这样做
  • @AditKothari 我需要使其动态化,这样我才能获得更少的数据,或者我可以获得更多的标签,当我什至不知道有多少标签时,我将如何隐藏和显示得到\

标签: xaml xamarin xamarin.forms


【解决方案1】:

如果您可以使用 xamarin forms3.5 或更高版本,BindableLayout,则有一个非常干净的答案。

Xaml 文件

<ListView
            x:Name="listView"
            HasUnevenRows="True"
            ItemsSource="{Binding Category}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>
                            <Label Text="{Binding Name}" TextColor="Blue" />
                            <StackLayout BindableLayout.ItemsSource="{Binding users}">
                                <BindableLayout.ItemTemplate>
                                    <DataTemplate>
                                        <Label Text="{Binding Name}" />
                                    </DataTemplate>
                                </BindableLayout.ItemTemplate>
                            </StackLayout>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

在我的视图模型中

public class DynamicSwitchViewModel:BaseViewModel
    {
        public DynamicSwitchViewModel(ContentPage view):base(view)
        {
            ObservableCollection<User> users1 = new ObservableCollection<User>();
            users1.Add(new User() { Name = "karan3" });
            users1.Add(new User() { Name = "karan4" });
            users1.Add(new User() { Name = "karan5" });
            ObservableCollection<User> users2 = new ObservableCollection<User>();
            users2.Add(new User() { Name = "karan1" });
            users2.Add(new User() { Name = "karan2" });
            users2.Add(new User() { Name = "karan3" });
            users2.Add(new User() { Name = "karan4" });
            users2.Add(new User() { Name = "karan5" });
            ObservableCollection<User> users3 = new ObservableCollection<User>();
            users3.Add(new User() { Name = "karan1" });
            users3.Add(new User() { Name = "karan2" });
            users3.Add(new User() { Name = "karan3" });
            Category = new ObservableCollection<Category>();
            Category.Add(new Category() { Name = "1",users=users1 });
            Category.Add(new Category() { Name = "2",users=users2 });
            Category.Add(new Category() { Name = "3",users=users3 });


        }
        private ObservableCollection<Category> category;
        public ObservableCollection<Category> Category
        {
            get { return category; }
            set { SetProperty(ref category, value); }
        }

    }
    public class Category
    {
        public  ObservableCollection<User> users { get; set; }
        public string Name { get; set; }
    }
    public class User
    {
        public string Name { get; set; }
    }

【讨论】:

  • 我尝试了相同但输出相同我面临同样的问题我在其他行中也得到重复值
  • 它不是重复的,我在所有行中添加了相同的值。请检查我的可观察集合 users1、users2 和 users3。都包含相同的字符串。
  • 如果您可以创建一个示例,我可以为您提供帮助。
  • 只需将数据添加到组 1 I.E karan 1, karan 2, karan 3, karan 4, karan 5 并将其他组留空不要添加任何数据
  • 即使从第 2 组和第 3 组中删除数据后,它仍按预期工作。这是屏幕截图imgur.com/qalpmHY
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2012-08-24
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多