xamarin.forms - 使用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()
});
解决方案
在您的类中添加一个布尔属性 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>
推荐阅读
- .net - 未找到带有 Mono 的 Apache
- reactjs - API 未返回正确的 JSON (react/express/axios)
- javascript - 将数组传递给函数 - PG 和 NodeJS
- angular - 来自 web api 2 的响应类型以及如何在 Angular 6 中处理它们
- datetime - 在 golang 中解析日期
- python - 一种在 Python 中向 contextvars 添加类型的方法
- matlab - BFGS 准牛顿算法不计算步长
- typo3 - TYPO3 异常 #1294587217:从 6.2.6 升级到 7.6.20 时
- javascript - 打开新标签或窗口,而不是弹出角度 2
- angular - 角度库安装对等依赖问题