簡體   English   中英

wp8將每個PivotItem綁定到不同的列表

[英]wp8 bind every PivotItem to different List

我已經使用Pivot controll創建了WP8應用程序。 有5個PivotItem,其中3個應綁定到3個列表或一個具有不同過濾數據的列表。 這個怎么做?

XAML:

 <phone:Pivot Name="PControl" Grid.Row="1" Style="{StaticResource PivotStyle}"> <phone:PivotItem> <phone:PivotItem.Header> <Grid Height="80"> <TextBlock Text="offer" FontSize="45" Height="80" /> </Grid> </phone:PivotItem.Header> <phone:LongListSelector Margin="0,0,0,0" ItemsSource="{Binding lstOffer}"> <phone:LongListSelector.ItemTemplate> <DataTemplate> <StackPanel Margin="0,0,0,17"> <TextBlock Text="some binding" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource TextBlockMnuTekst}"/> </StackPanel> </DataTemplate> </phone:LongListSelector.ItemTemplate> </phone:LongListSelector> </phone:PivotItem> </phone:Pivot> . . . <phone:PivotItem> <phone:PivotItem.Header> <Grid Height="80"> <TextBlock Text="services" FontSize="45" Height="80" /> </Grid> </phone:PivotItem.Header> <phone:LongListSelector Margin="0,0,0,0" ItemsSource="{Binding lstServices}"> <phone:LongListSelector.ItemTemplate> <DataTemplate> <StackPanel Margin="0,0,0,17"> <TextBlock Text="some binding" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource TextBlockMnuTekst}"/> </StackPanel> </DataTemplate> </phone:LongListSelector.ItemTemplate> </phone:LongListSelector> </phone:PivotItem> 

C#:

 public class clsPivotData { public string Name { get; set; } public List<clsPivotItemList> PivotItemList { get; set; } public clsPivotData() { PivotItemList = new List<clsPivotItemList>(); } } public class clsPivotItemList { public string id { get; set; } public string ssubname { get; set; } public string visible { get; set; } public string icon { get; set; } public string itemType { get; set; } public string url { get; set; } public string desc { get; set; } } public partial class MainPage : PhoneApplicationPage { public ObservableCollection<clsPivotData> Items { get; set; } public static MainPage CurrentMainPage; public List<clsPivotData> lstOffer { get; set; } public List<clsPivotData> lstServices { get; set; } public List<clsPivotData> lstInfo { get; set; } // Constructor public MainPage() { InitializeComponent(); CurrentMainPage = this; // Set the data context of the listbox control to the sample data DataContext = App.ViewModel; lstOffer = new List<clsPivotData>(from i in Items where i.Name == "offer" select i); lstServices = new List<clsPivotData>(from i in Items where i.Name == "services" select i); lstInfo = new List<clsPivotData>(from i in Items where i.Name == "info" select i); . . . 

我在lstOffer和lstServices中獲得了正確的數據,但未顯示正在加載數據,這不是問題。 我不知道如何從LongListSelector(Text = some綁定)將TextBlock綁定到屬性ssubname,該屬性是clsPivotItemList類的屬性,而List是clsPivotData類的屬性。

試試這個<TextBlock Text="{Binding ssubname}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource TextBlockMnuTekst}"/>

<Grid Datacontext="{Binding lstOffer }">
<phone:LongListSelector Margin="0,0,0,0" ItemsSource="{Binding PivotItemList }">
                        <phone:LongListSelector.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Margin="0,0,0,17">
                                    <TextBlock Text="{Binding ssubname}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource TextBlockMnuTekst}"/>
                                </StackPanel>
                            </DataTemplate>
                        </phone:LongListSelector.ItemTemplate>
                    </phone:LongListSelector>
</Grid>

我終於找到了答案。 我將下一個代碼放在MainViewModel類中:

 public ObservableCollection<clsPivotData> Items { get; set; } public ObservableCollection<clsPivotData> lstOffer { get; set; } public ObservableCollection<clsPivotData> lstServices { get; set; } public ObservableCollection<clsPivotData> lstInfo { get; set; } // Constructor public MainViewModel() { this.Items = new ObservableCollection<clsPivotData>(); LoadData(); lstOffer = Items.Where(o => o.Name == "offer").FirstOrDefault().PivotItems; lstServices = Items.Where(o => o.Name == "service").FirstOrDefault().PivotItems; lstInfo = Items.Where(o => o.Name == "info").FirstOrDefault().PivotItems; } 

在XAML中,我以這種方式插入了ListBox:

 <ListBox Margin="0,0,0,0" ItemsSource="{Binding lstOffer}"> <ListBox.ItemTemplate> <DataTemplate> <ItemsControl> <StackPanel Margin="0,0,0,17"> <TextBlock Text="{Binding ssubname}" TextWrapping="Wrap" Margin="12,0,12,0" Style="{StaticResource TextBlockMnuTekst30}"/> </StackPanel> </ItemsControl> </DataTemplate> </ListBox.ItemTemplate> </ListBox> . . . 
在以前的解決方案中,lstOffer,lstServices和lstInfo不在MainVewModel中,而是在MainPage中,並且MainPage的DataContext設置為MainViewModel ViewModel對象。 這個新解決方案為我帶來了我期望的結果,這意味着將填充ListBox。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM