首页 文章

如何使用Xamarin.Forms xaml编辑器预览ListView

提问于
浏览
2

我正在使用自定义单元格在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 .


2nd Part

好的,所以我尝试使用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 更改为静态但没有任何改变 . 还重建了解决方案,错误消失但预览仍为空 . 我在这里错过了什么?

2 回答

  • 1

    您必须为设计时要呈现的行提供某种 BindingContext . James Montemagno有一个awesome article解释了如何做到这一点 .

    推荐的另一篇推荐文章是this one on Xamarin Help

    enter image description here

    EDIT 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;
            }
        }
    }
    
  • 2

    你不能 . 如果您使用的是MVVM框架,则仍需要生成/ Build代码 .

    另一种方法是使用Xamarin Live Player哪些可以构建列表在您的实际设备上为android和ios

    仅供参考:目前在回答这个问题时,它正在使用Alpha

相关问题