首页 > 解决方案 > 使用foreach在Master详细信息中的分隔符?

问题描述

在此处输入图像描述我需要一点帮助。

我正在开发一个使用 Grial UIKIt 的移动应用程序。他们使用类似于 MaterDetail 菜单的简单内容页面。我试图在两个条目之间获取分隔符,而不是整个列表。我正在尝试使用 boxView 作为分隔符。但是整个菜单都是这样的。

My Xaml

<!-- MENU ENTRIES -->
            <ListView
                Margin="5,20,0,5"
                Grid.Row="1"
                x:Name="MainListView"
                SelectedItem="{ Binding MainMenuSelectedItem, Mode=TwoWay }"
                ItemsSource="{ Binding MainMenuEntries }"
                VerticalOptions="FillAndExpand"
                Style="{ StaticResource MainMenuListViewStyle }"
                CachingStrategy="RecycleElement"
            >
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout>
                                <StackLayout>
                                    <local:MainMenuItemTemplate />
                                </StackLayout>
                                <BoxView Grid.Row="0" x:Name="boxViewVisible"
                                VerticalOptions="End" Margin="0"
                                Style="{ StaticResource Horizontal1ptLineStyle }"
                                BackgroundColor="{ DynamicResource OverImageTextColor }" IsVisible="{Binding isVisible}"/>
                            </StackLayout>

                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

我正在尝试什么

public void isVisible(BoxView boxView)
    {
        foreach (var page in MainListView.ItemsSource)
        {
            if (page is MyArticle)
            {
                boxView.IsVisible  = true;
            }
            else
            {
                boxView.IsVisible = false;
            }

        }

    }

这不起作用,我仍然将每一行分开。我无法在我的cs中访问我的boxview,因为它在listview中它不允许我。

请帮我解决一下这个。

编辑

  public class MenuEntry
            {


                public string Name { get; set; }
                public string Icon { get; set; }
                public bool UseTransparentNavBar { get; set; }
                public Type PageType { get; set; }
                public Func<Page> CreatePage { get; set; }
                public Type NavigationPageType { get; set; }
                public bool IsModal { get; set; }
            }
        }

  private void LoadData()
        {
            MainMenuEntries = new List<MenuEntry>();

            //foreach (var cat in Catalog.MenuItemList)
            //{

            MainMenuEntries.Add(new MenuEntry
            {
                Name = AppResources.A_StringCategory,
                Icon = GrialIconsFont.File,
                CreatePage = () => new ArticleBrowser()
            });

            MainMenuEntries.Add(new MenuEntry
            {
                Name = AppResources.A_Category,
                Icon = GrialIconsFont.User,
                CreatePage = () => new Login()
            });

标签: xamarin.forms

解决方案


在您的类中添加一个布尔属性 HasSeparator 并将其绑定到 BoxView 的 IsVisible 属性。

物品类别

public class MasterPageItem
{
    public string Title { get; set; }
    public bool HasSeparator { get; set; }
}

添加项目

MasterPageItems = new List<MasterPageItem>()
{
    new MasterPageItem(){Title = "One"},
    new MasterPageItem(){Title = "Two"},
    new MasterPageItem(){Title = "Three", HasSeparator = true},
    new MasterPageItem(){Title = "Four"},
    new MasterPageItem(){Title = "Five", HasSeparator = true},
    new MasterPageItem(){Title = "Six"},
    new MasterPageItem(){Title = "Seven"},
    new MasterPageItem(){Title = "Eight"},
};

Xaml 用法

<ListView ItemsSource="{Binding MasterPageItems}" SeparatorVisibility="None">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout>
                    <Label Text="{Binding Title}" />
                    <BoxView
                        BackgroundColor="Gray"
                        HeightRequest="2"
                        IsVisible="{Binding HasSeparator}"
                        VerticalOptions="End" />
                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

推荐阅读