如何从代码后面为数据绑定设置ItemsSource
本文关键字:数据绑定 设置 ItemsSource 代码 | 更新日期: 2023-09-27 18:29:59
我不知道如何用程序将ItemsSource设置为我的Pivot。我正在使用MVVM Light ViewModelLocator注册我的ViewModel。然后我设置页面的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>
因此,在ViewModel中,除了TripTypeViewModelDataSource之外,我还有TripTypeViewModelDataSource2。
在视图的xaml.cs中,我通常会这样做:
TripsSegmentsPivot.ItemsSource = ViewModelLocator.TripTypeVM.TripTypeViewModelDataSource;
TripsSegmentsPivot.ItemsSource = ViewModelLocator.TripTypeVM.TripTypeViewModelDataSource2;
但它不起作用。。
有很多方法可以绑定,但让我们讨论一些。。。
-
直接指向Pivot对象本身:http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemssource(v=vs.105).aspx
MyPivot.Itemsource=mycollection;
- 您可以使用集合视图源:http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.110).aspx如果你把一个容器控件拖到表面上,Visual Stuidio会创建这些控件,它还会把代码放在后面的代码中,这样你就可以"连接起来"。它可以很好地与任何集合类型配合使用,并与LINQ完全集成
- 您可以在视图模型中设置可观察集合,并从视图绑定到它们。最简单的方法是在视图XAML本身中创建视图模型的静态实例,因为visual studio属性页将"查看"视图模型,并允许您选择该属性作为项源。你所需要做的就是实现INPC或创建一个依赖属性(在需要的地方),然后你就可以开始了。当特性发生更改时,您需要这样来通知视图。https://www.google.com/webhp?sourceid=chrome-即时&离子=1&espv=2&ie=UTF-8#q=使用%20inotifyproperty更改
如果您需要在运行时更改集合,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}"
然后,您可以在视图模型中随意更改集合,如下所示。
MyCVS.Source = Collection1;
MyCVS.Source = Collection2;