[英]How to set ItemsSource for a databinding from the code-behind
我無法弄清楚如何以編程方式將ItemsSource設置為Pivot。 我正在使用注冊了ViewModel的MVVM Light ViewModelLocator。 然后,設置頁面的數據源,並在數據透視圖的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>
因此,在ViewModel中,除了TripTypeViewModelDataSource,我也有TripTypeViewModelDataSource2。
在View的xaml.cs中,我通常會這樣做:
TripsSegmentsPivot.ItemsSource = ViewModelLocator.TripTypeVM.TripTypeViewModelDataSource;
TripsSegmentsPivot.ItemsSource = ViewModelLocator.TripTypeVM.TripTypeViewModelDataSource2;
但它不起作用..
綁定有很多方法,但讓我們討論一些...
直接指向Pivot對象本身: http : //msdn.microsoft.com/zh-cn/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 =“ {Binding MyCVS}”
然后,您可以像這樣在viewmodel中隨意更改集合。
MyCVS.Source = Collection1;
MyCVS.Source = Collection2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.