绑定用户控件列表到flipview?

时间:2017-11-15 11:53:45

标签: c# win-universal-app windows-10-universal windows-10-desktop

我打算实现用户控件的水平列表,我希望在运行时将其添加到翻转视图中,我尝试了以下代码:

<FlipView Grid.Row="2" Name="SlideFlipView"
              ItemsSource="{x:Bind SlideViews}"
              SelectionChanged="SlideFlipView_SelectionChanged"
              Background="AliceBlue">
        <FlipView.ItemTemplate>
            <DataTemplate>
                <Frame Name="MenuDetailFrame" SourcePageType="{Binding}"/>
            </DataTemplate>
        </FlipView.ItemTemplate>
</FlipView>

类看起来像以下代码:

 public sealed partial class MenuDetailPage : Page
 {
    private List<object> SlideViews;

    public MenuDetailPage()
    {
        this.InitializeComponent();
        LoadInitials();
    }

    private void LoadInitials()
    {
        SlideViews = new List<object>
        {
            typeof(TopImageBottomTextControl),
            typeof(TopTextBottomImageControl)
        };
    }
 }

但是当我运行程序时,用户控件不会出现在翻盖中。如果我在这里遗漏了什么,请告诉我

2 个答案:

答案 0 :(得分:1)

根据array { }

  

可以使用XAML命名空间映射解释的字符串到类型转换在XAML中设置SourcePageType,但很少这样做。在应用程序级别跟踪激活以及暂停的应用程序是否正在恢复,然后使用Frame.Navigate设置当前页面,这是一种更好的做法。

根据您的要求,您可以将用户控件对象绑定到Frame的Content

private void LoadInitials()
{
    SlideViews = new List<object>
 {
    new TopImageBottomTextControl(),
    new TopImageBottomTextControl()
 };
}

<强>用法

<FlipView Name="SlideFlipView"
          ItemsSource="{x:Bind SlideViews}"
          SelectionChanged="SlideFlipView_SelectionChanged"
          Background="AliceBlue">
    <FlipView.ItemTemplate>
        <DataTemplate>
            <Frame Name="MenuDetailFram"  Content="{Binding}" />
        </DataTemplate>
    </FlipView.ItemTemplate>
</FlipView>

答案 1 :(得分:1)

以下代码没有datatemplate为我工作:

<FlipView Grid.Row="2" 
          Name="SlideFlipView" 
          ItemsSource="{x:Bind SlideViews}"
          SelectionChanged="SlideFlipView_SelectionChanged"
          Background="AliceBlue">
</FlipView>

在类中初始化slideviews对象看起来像

private void LoadInitials()
{
  SlideViews = new List<object>
  {
    new UserControl1(),
    new UserControl2()
  };
}