如何使用Xamarin.Forms xaml编辑器

时间:2017-11-09 09:06:09

标签: xaml xamarin xamarin.forms visual-studio-2017

我正在使用自定义单元格在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更改为静态,但没有任何改变。还重建了解决方案,错误消失但预览仍为空。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

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

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

enter image description here

编辑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