我有一个ViewModel类" MyViewModel"在里面我有一个ObservableCollection" MyCollection"。
然后在代码隐藏视图中,我这样做来设置数据上下文:
this.DataContext = new MyViewModel();
并在视图的前端
<Pivot ItemsSource="{Binding MyCollection}" SelectionChanged="Pivot_SelectionChanged" Margin="0" Grid.Row="1">
但是如果我需要使用不同的ViewModel&#34; MyViewModel2&#34;用&#34; MyCollection2&#34;在这个视图里面。我该如何跳过这一步:
this.DataContext = new MyViewModel();
并仅在xaml中绑定?
我尝试了这个但没有任何结果:
<Pivot ItemsSource="{Binding MyViewModel.MyCollection}" SelectionChanged="Pivot_SelectionChanged" Margin="0" Grid.Row="1">
答案 0 :(得分:4)
您最好在同一个视图模型中使用两个集合... 或者您可以使用主ViewModel类来引用两个子视图模型;像这样的东西:
MyViewModel类:
public class MyViewModel
{
public ObservableCollection<string> DataInfo { get; set; }
public MyViewModel()
{
DataInfo = new ObservableCollection<string>();
}
}
MasterViewModel类:
public class MasterViewModel
{
public MyViewModel VM1 { get; set; }
public MyViewModel VM2 { get; set; }
public MasterViewModel()
{
this.VM1 = new MyViewModel();
this.VM2 = new MyViewModel();
VM1.DataInfo.Add("Data 1-1");
VM1.DataInfo.Add("Data 1-2");
VM2.DataInfo.Add("Data 2-1");
VM2.DataInfo.Add("Data 2-2");
}
}
查看代码隐藏:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MasterViewModel();
}
}
<强> XAML 强>
<Window x:Class="DeleteMe4SOw.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="400" Width="525">
<StackPanel Orientation="Vertical">
<ListView ItemsSource="{Binding VM1.DataInfo}" Height="150" Margin="10" />
<ListView ItemsSource="{Binding VM2.DataInfo}" Height="150" Margin="10"/>
</StackPanel>
</Window>
答案 1 :(得分:1)
这是我的大师班:
class CompositeViewModel
{
public TripsResponseTypeViewModel tripsResponseTypeViewModel { get; set; }
public TripsViewModel tripsViewModel { get; set; }
}
在TripsResponseTypeViewModel中的我有:
...
private ObservableCollection<TripsResponseType> _tripsViewModelDataSource;
public ObservableCollection<TripsResponseType> TripsViewModelDataSource
{
get
{
if (null == this._tripsViewModelDataSource)
{
this._tripsViewModelDataSource = new ObservableCollection<TripsResponseType>();
}
return this._tripsViewModelDataSource;
}
}
...
在我的视图中,我想将此TripsViewModelDataSource设置为Pivot的ItemsSource,如下所示:
<Pivot ItemsSource="{Binding tripsResponseTypeViewModel.TripsViewModelDataSource}"...
在View.xaml.cs中,我按照你的说法做了:
this.DataContext = new CompositeViewModel();
什么都没有..