如何在XAML中将绑定上下文设置为其他类?

时间:2017-08-30 18:42:51

标签: xaml xamarin data-binding syncfusion

我已经得到了这段代码我试图绑定到一个名为BandInfoRepository.cs的类,该类与这个名为PaginaB的XAML位于同一个文件夹中。我看不到语法错误显示在VisualStudio上,仍然没有显示文本(我添加了backgroundColor只是为了查看标签是否正在显示而且它们是,但文本不是。)。

指出我使用syncfusion的列表视图可能很重要。

PaginaB.xaml:

           <syncfusion:SfListView x:Name="listView"
                ItemsSource="{Binding Source={local2:BandInfoRepository}, Path=BandInfo}" 
                ItemSize="100"
                AbsoluteLayout.LayoutBounds="1,1,1,1" 
                AbsoluteLayout.LayoutFlags="All" >
                <syncfusion:SfListView.ItemTemplate>
                    <DataTemplate>
                        <Grid Padding="10">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="0.4*" />
                                <RowDefinition Height="0.6*" />
                            </Grid.RowDefinitions>
                            <Label Text="{Binding Source={local2:BandInfoRepository}, Path=BandName}"
                                BackgroundColor="Olive"
                                FontAttributes="Bold" 
                                TextColor="Black" 
                                FontSize="20" />
                            <Label Grid.Row="1"
                                BackgroundColor="Navy"
                                Text="{Binding Source={local2:BandInfoRepository}, Path= BandDescription}" 
                                TextColor="Black" 
                                FontSize="14"/>
                        </Grid>
                    </DataTemplate>
                </syncfusion:SfListView.ItemTemplate>
            </syncfusion:SfListView>

这是BandInfoRepository.cs文件:

public class BandInfoRepository
{
    private ObservableCollection<BandInfo> bandInfo;

    public ObservableCollection<BandInfo> BandInfo
    {
        get { return bandInfo; }
        set { this.bandInfo = value; }
    }

    public BandInfoRepository()
    {
        GenerateBookInfo();
    }

    internal void GenerateBookInfo()
    {
        bandInfo = new ObservableCollection<BandInfo>();
        bandInfo.Add(new BandInfo() { BandName = "Nirvana", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "Metallica", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "Frank Sinatra", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "B.B. King", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "Iron Maiden", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "Megadeth", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "Darude", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "Coldplay", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "Dream Evil", BandDescription = "description" });
        bandInfo.Add(new BandInfo() { BandName = "Pentakill", BandDescription = "description" });
    }
}

2 个答案:

答案 0 :(得分:1)

在你的DataTemplate中,你没有正常设置Source in binding,除非你想做一些魔术。 XAML将DataContext设置为ItemsSource的每个项目。

尝试:

 <Label Text="{Binding BandName}" BackgroundColor="Olive" FontAttributes="Bold" />

如果您希望XAML跟踪其属性中的更改,请记住为BandInfo实现INotifyPropertyChanged

答案 1 :(得分:0)

感谢您使用Syncfusion产品。

我们查看了您的代码,发现您错误地定义了ItemTemplate。您可以将基础集合中的数据对象直接绑定到ItemTemplate属性中定义的视图中。 SfListView本身为ItemsSource属性中的每个项创建一个视图,并为其定义绑定上下文。

供您参考,我们已附上样本,您可以从以下链接下载。

示例:http://www.syncfusion.com/downloads/support/directtrac/general/ze/ListViewSample607957192

有关使用SfListView的更多信息,请参阅以下UG文档链接。 https://help.syncfusion.com/xamarin/sflistview/getting-started

如果您需要进一步的帮助,请告知我们。

此致 Dinesh Babu Yadav