C# 如何从代码隐藏中为数据绑定设置ItemsSource
我不知道如何通过编程将ItemsSource设置为我的Pivot。我正在使用MVVM Light ViewModelLocator注册我的ViewModel。然后设置页面的数据源,并在Pivot的xaml中设置其ItemsSource。但在ViewModel中,我还有其他集合,我希望在运行时将其更改为Pivot的ItemsSource: 这是我的ViewModelLocator:C# 如何从代码隐藏中为数据绑定设置ItemsSource,c#,xaml,mvvm,binding,mvvm-light,C#,Xaml,Mvvm,Binding,Mvvm Light,我不知道如何通过编程将ItemsSource设置为我的Pivot。我正在使用MVVM Light ViewModelLocator注册我的ViewModel。然后设置页面的数据源,并在Pivot的xaml中设置其ItemsSource。但在ViewModel中,我还有其他集合,我希望在运行时将其更改为Pivot的ItemsSource: 这是我的ViewModelLocator: public class ViewModelLocator { public ViewModelLocato
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() {}
}
但是它不起作用。绑定的方法有很多,但让我们讨论一些
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;
但我仍然不知道如何访问ViewModel中的这些集合来执行“MyPivot.Itemsource=mycollection;”。它们不是静态属性。viewmodel只包含集合,该集合应该是具有getter setters的公共属性。绑定可以在xaml中完成,也可以作为一个单独的关注点在VM中完成。不要在MyPivot.Itemsource属性之后进行绑定,而要在VM.TripTypeViewModelDataSource属性之后进行绑定。获取VM的实例并设置集合。我得到了它。我必须更改我的Pivots itemsource绑定到的ViewModel中集合的内容。但是,当我想用另一种类型的元素(它的ObservableCollection)填充它时,如何更改它呢?要绑定到其他类型,每种类型需要2个ObservableCollection(除非您谈论的是超类型和子类型=继承)。但是,当您需要切换视图绑定的类型时,VM只需执行以下操作:MyPivot.Itemsources=Collection1;或Collection2,具体取决于需要。认识到直接在虚拟机内设置UI/view属性肯定不是MVVM,这将引导您采用不同的方法。正如其中一个答案所说,您要做的是将
ItemsSource
定义为绑定到VM集合属性。然后,您可以在您的虚拟机中自由更改该虚拟机属性,而无需使用特定的UI元素。
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}"
MyCVS.Source = Collection1;
MyCVS.Source = Collection2;