我无法弄清楚如何以编程方式将ItemsSource设置为我的Pivot。我正在使用MVVM Light ViewModelLocator注册我的ViewModel。然后我设置了我的Page的DataSource,并在Pivot的xaml中设置了ItemsSource。但是在ViewModel中我有其他的集合,我想在运行时更改为我的Pivot的ItemsSource:
这是我的ViewModelLocator:
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<TripTypeViewModel>();
}
public TripTypeViewModel TripTypeVM
{
get
{
return ServiceLocator.Current.GetInstance<TripTypeViewModel>();
}
}
public static void Cleanup() {}
}
页面的XAML:
<Page
...
DataContext = "{Binding Source={StaticResource Locator}, Path=TripTypeVM }">
...
<Pivot x:Name="TripsSegmentsPivot" Title="Locator" Foreground="#FF888888" Style="{StaticResource PivotStyle1}" SelectionChanged="Pivot_SelectionChanged" Margin="0" Grid.Row="1" ItemTemplate="{StaticResource TripTypeTemplate1}" ItemsSource="{Binding TripTypeViewModelDataSource}">
<Pivot.HeaderTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding id}"/>
</Grid>
</DataTemplate>
</Pivot.HeaderTemplate>
</Pivot>
所以在除TripTypeViewModelDataSource之外的ViewModel中我还有TripTypeViewModelDataSource2。
在View的xaml.cs中,我通常会这样做:
TripsSegmentsPivot.ItemsSource = ViewModelLocator.TripTypeVM.TripTypeViewModelDataSource;
TripsSegmentsPivot.ItemsSource = ViewModelLocator.TripTypeVM.TripTypeViewModelDataSource2;
但它不起作用..
答案 0 :(得分:1)
有许多方法可以约束,但让我们讨论几个...
直接指向Pivot对象:http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemssource(v=vs.105).aspx
MyPivot.Itemsource=mycollection;
如果您需要在运行时更改集合,CollectionViewSource使用起来很简单..就像这样......
MyCollectionViewSource.Source = MyCollection.Where(p=>p.Name==SelectedName).ToList();
MyCollectionViewSource.Source = MyCollection.Where(p=>p.ID > 500).ToList();
MyCollectionViewSource.Source = MyOtherCollection.ToList();
MyCollectionViewSource.Source = JustSayNoToObamaCare();
在当前代码中显示:
ItemsSource="{Binding TripTypeViewModelDataSource}"
如果你使用这样的CollectionViewSource: ItemsSource =&#34; {Binding MyCVS}&#34;
然后,您可以在视图模型中随意更改集合。
MyCVS.Source = Collection1;
MyCVS.Source = Collection2;