我正在使用自定义单元格在Xamarin.Forms中实现ListView,但由于预览显示空列表并且每次重新构建都非常耗时,我无法看到我正在做什么。我甚至看不到简单的TextCell ..
如何在编辑器中查看单元格的预览?这是我的xaml:
<?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:local="clr-namespace:MyNamespace"
x:Class="MyNamespace.MyAppPage">
<ContentPage.Content>
<ListView x:Name="myList">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="Preview?" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage.Content>
注意:我使用的是Visual Studio 2017 for Mac。
第二部分
好的,所以我尝试使用BindingContext,但我不太清楚这个属性的用法。这是我更新的XAML:
<?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:local="clr-namespace:MyNamespace;assembly:MyNamespace"
BindingContext="{x:Static local:MusicSeed.Model}"
x:Class="MyNamespace.MyAppPage">
<ContentPage.Content>
<ListView ItemsSource="{Binding Tracks}">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage.Content>
</ContentPage>
这就是我拥有数据的地方, MusicSeed.cs :
namespace MyNamespace
{
public static class MusicSeed
{
public static readonly MusicSeedModel Model = new MusicSeedModel();
}
public class MusicSeedModel
{
public readonly MusicTrack[] Tracks =
{
new MusicTrack("Track 01"),
new MusicTrack("Track 02"),
new MusicTrack("Track 03"),
new MusicTrack("Track 04"),
};
}
}
结果是XAML编辑器抛出此错误:
找不到本地的静态成员:MusicSeed.Model
我尝试将Tracks
更改为静态,但没有任何改变。还重建了解决方案,错误消失但预览仍为空。我在这里缺少什么?
答案 0 :(得分:2)
您必须为设计时要呈现的行提供某种BindingContext
。 James Montemagno有awesome article解释了如何做到这一点。
要推荐的另一篇推荐文章是this one on Xamarin Help
编辑1:
您的XAML是正确的,但视图模型是错误的。您只能绑定到属性。尝试将您的声明更改为以下内容:
namespace MyNamespace
{
public class MusicSeed
{
public static MusicSeedModel Model { get; } = new MusicSeedModel();
}
public class MusicSeedModel
{
public MusicTrack[] Tracks { get; } =
{
new MusicTrack("Track 01"),
new MusicTrack("Track 02"),
new MusicTrack("Track 03"),
new MusicTrack("Track 04"),
};
}
public class MusicTrack
{
public string Name { get; }
public MusicTrack(string v)
{
this.Name = v;
}
}
}
答案 1 :(得分:1)
你做不到。如果您使用的是MVVM框架,则仍需要生成/ Build。
另一种选择是使用Xamarin Live Player哪些可以在您的实际设备上为Android和ios构建列表
仅供参考:目前在回答这个问题时,它正在使用Alpha