UWP C#Pivot数据绑定

时间:2017-12-26 18:38:03

标签: c# uwp pivot

我正试图获得动态支点。所以动态标题和项目。它们取决于集合中的对象数量,它们具有名称和标题。 但我不知道如何实现这一点,因为我无法访问这些数据:

  <Pivot 
        x:Name="PivotExample"
        ItemsSource="{x:Bind Books}">
        <Pivot.HeaderTemplate>
            <DataTemplate x:DataType="Books">
                <TextBlock Text="{Binding Books.Name, Mode=OneWay}"/>
            </DataTemplate>
        </Pivot.HeaderTemplate>
        <Pivot.ItemTemplate>
             <DataTemplate>
                <TextBlock Text="{Binding Books.Title}"
             </DataTemplate>
  </Pivot>

我不知道如何让它发挥作用。感谢帮助。

由于 学家

1 个答案:

答案 0 :(得分:1)

这是一个工作示例(如果在编译期间收到任何错误消息,请手动重建项目):

MainPage.xaml中

<Pivot ItemsSource="{x:Bind books}">

    <Pivot.HeaderTemplate>
        <DataTemplate x:DataType="local:Book">
            <TextBlock Text="{x:Bind Name}"/>
        </DataTemplate>
    </Pivot.HeaderTemplate>

    <Pivot.ItemTemplate>
        <DataTemplate x:DataType="local:Book">
            <TextBlock Text="{x:Bind Title}"/>
        </DataTemplate>
    </Pivot.ItemTemplate>

</Pivot>

MainPage.xaml.cs中

public sealed partial class MainPage : Page
{
    ObservableCollection<Book> books = new ObservableCollection<Book>
    {
        new Book { Name = "Name1", Title = "Title1" },
        new Book { Name = "Name2", Title = "Title2" },
        new Book { Name = "Name3", Title = "Title3" },
        new Book { Name = "Name4", Title = "Title4" }
    };

    public MainPage()
    {
        this.InitializeComponent();
    }
}

Book.cs

public class Book
{
    public string Name { get; set; }
    public string Title { get; set; }
}

请注意,x:Bind默认使用OneTime Mode,这意味着对图书名称和标题所做的更改不会自动反映在{{1}中} 控制。如果这不是所需的行为,那么您需要使用Pivot绑定OneWay并在Mode类中实现INotifyPropertyChanged接口:< / p>

MainPage.xaml中

Book

Book.cs

...
    <TextBlock Text="{x:Bind Name, Mode=OneWay}"/>
...
    <TextBlock Text="{x:Bind Title, Mode=OneWay}"/>
...

您可以使用public class Book : INotifyPropertyChanged { private string name; public string Name { get { return name; } set { name = value; NotifyPropertyChanged("Name"); } } private string title; public string Title { get { return title; } set { title = value; NotifyPropertyChanged("Title"); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } 运算符来避免设置器中的魔术字符串。

使用nameof here了解有关数据绑定的详情。