2017-04-26 27 views
0

我嘗試將透視圖綁定到Windows通用應用程序中的DataContext。 一切工作正常,但似乎我無法混合綁定和「靜態」PivotItems。 我需要基於列表和靜態PivotItem包含設置創建0到n PivotItems。Windows通用應用程序透視綁定和一個靜態透視項

這就是我試過的。如果我刪除HeaderTemplate和ItemTemplate元素,則顯示PivotItem-Element。如果我讓那裏的模板元素放置綁定的數據顯示,但不是額外的PivotItem。

它甚至可以混合?

<Pivot Name="PivotMain" Title="Title" ItemsSource="{Binding Path=Parts}"> 
      <Pivot.HeaderTemplate> 
       <DataTemplate x:DataType="viewmodel:DetailModel"> 
        <TextBlock Text="{Binding Name}"/> 
       </DataTemplate> 
      </Pivot.HeaderTemplate> 
      <Pivot.ItemTemplate> 
       <DataTemplate x:DataType="viewmodel:DetailModel"> 
        <TextBlock Text="TestTest"/> 
       </DataTemplate> 
      </Pivot.ItemTemplate> 
      <PivotItem Name="Settings" Header="Settings"> 
       <ScrollViewer VerticalScrollMode="Auto" VerticalScrollBarVisibility="Auto"> 
        <ListView ItemsSource="{Binding Path=Settings}"> 
         <ListView.ItemTemplate> 
          <DataTemplate x:DataType="viewmodel:SettingModel"> 
           <RelativePanel> 
            <ToggleSwitch Name="OnOff" 
                OffContent="{Binding OffContent}" OnContent="{Binding OnContent}" IsOn="{Binding IsMonitored, Mode=TwoWay}" 
                RelativePanel.AlignLeftWithPanel="True" /> 
           </RelativePanel> 
          </DataTemplate> 
         </ListView.ItemTemplate> 
        </ListView> 
       </ScrollViewer> 
      </PivotItem> 
     </Pivot> 

回答

0

它甚至可以混合使用?

據我所知,這是不可能的。但是您可以使用其他方式來滿足您的要求。你真正想要做的是第一個PivotItem與他人有不同的內容。您應該可以使用Data​Template​Selector,您可以爲其他人選擇不同的DataTemplate作爲第一項(該標題是設置)。例如,代碼如下:

XAML

<Page.Resources> 
    <DataTemplate x:Key="itemstemplate" x:DataType="local:DetailModel"> 
     <TextBlock Text="TestTest"/> 
    </DataTemplate> 
    <DataTemplate x:Key="settingtemplate" x:DataType="local:DetailModel"> 
     <ScrollViewer VerticalScrollMode="Auto" VerticalScrollBarVisibility="Auto"> 
      <ListView ItemsSource="{Binding Path=Settingss}"> 
       <ListView.ItemTemplate> 
        <DataTemplate x:DataType="local:SettingModel"> 
         <RelativePanel> 
          <ToggleSwitch Name="OnOff" OffContent="{Binding OffContent}" OnContent="{Binding OnContent}" IsOn="{Binding IsMonitored, Mode=TwoWay}" RelativePanel.AlignLeftWithPanel="True" /> 
         </RelativePanel> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </ScrollViewer> 
    </DataTemplate> 

    <local:PivotTemplateSelector 
     itemstemplate="{StaticResource itemstemplate}" 
     settingtemplate="{StaticResource settingtemplate}" 
     x:Key="PivotTemplateSelector" /> 
</Page.Resources> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Pivot Name="PivotMain" Title="Title" ItemsSource="{Binding Path=Parts}" ItemTemplateSelector="{StaticResource PivotTemplateSelector}">  
      <Pivot.HeaderTemplate> 
      <DataTemplate x:DataType="local:DetailModel"> 
       <TextBlock Text="{Binding Name}"/> 
      </DataTemplate> 
     </Pivot.HeaderTemplate>  
    </Pivot> 
</Grid> 

代碼背後

public sealed partial class MainPage : Page 
{ 
    ObservableCollection<DetailModel> Parts; 
    ObservableCollection<SettingModel> Settingss; 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     Settingss = new ObservableCollection<SettingModel>() 
     { 
      new SettingModel() 
      { 
       IsMonitored=true, 
       OffContent="work at", 
       OnContent="content" 
      } 
     }; 
     Parts = new ObservableCollection<DetailModel>() 
     { 
      new DetailModel() 
      { 
       Name="Settings", 
       Settingss=Settingss 
      }, 
      new DetailModel() 
      { 
       Name="test1" 
      }, 
      new DetailModel() 
      { 
       Name="test2" 
      } 
     }; 

     datasources datasource = new datasources() 
     { 
      Parts = Parts 
     }; 
     this.DataContext = datasource; 
    } 
} 
public class PivotTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate itemstemplate { get; set; } 
    public DataTemplate settingtemplate { get; set; } 

    protected override DataTemplate SelectTemplateCore(object item) 
    { 
     DetailModel itemget = item as DetailModel; 
     if (itemget.Name == "Settings") 
     { 
      return settingtemplate; 
     } 
     else 
      return itemstemplate; 

     return base.SelectTemplateCore(item); 
    } 

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
    { 
     return SelectTemplateCore(item); 
    } 
} 
public class datasources 
{ 
    public ObservableCollection<DetailModel> Parts { get; set; } 
} 

public class DetailModel 
{ 
    public string Name { get; set; } 

    public ObservableCollection<SettingModel> Settingss { get; set; } 
} 

public class SettingModel 
{ 
    public string OffContent { get; set; } 
    public string OnContent { get; set; } 
    public bool IsMonitored { get; set; } 
} 
+0

您是IST要走的路權DataTemplateSelector。 –