我目前有一个简单的应用程序,它由两个同步的 ListBox 组成,这些 ListBox 绑定到 ObservableCollections,它们包装了两个不同的实体框架类。
当 listBox1 中的 Part 项目被选中时,它会将SelectedItem
的导航键信息传递给 listBox2,listBox2 会显示 Vendors 实体的相应子集。
目前,我的 ViewModel (MainViewModel.cs) 看起来像:
public MainViewModel()
{
_context = new DBEntities();
_partsCollection = new ObservableCollection<Part>(_context.Parts);
_vendorsCollection = new ObservableCollection<Vendor>(_context.Vendors);
}
public ObservableCollection<Part> PartsCollection
{
get { return _partsCollection; }
set
{
OnPropertyChanged("PartsCollection");
_partsCollection = value;
}
}
public Observable<Part> SelectedPart
{
get { return _selectedPart; }
set
{
OnPropertyChanged("SelectedPart");
_selectedPart = value;
}
}
public ObservableCollection<Vendor> VendorsCollection
{
get { return _vendorsCollection; }
set
{
OnPropertyChanged("VendorsCollection");
_vendorsCollection = value;
}
}
我的视图(MainView)看起来像:
<UserControl.Resources>
<local:MainViewModel x:Key="MainViewModelDataSource" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource MainViewModelDataSource}}">
<ListBox ItemsSource="{Binding PartsCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="43,87,377,57" Name="listBox1"
SelectedItem="{Binding SelectedPart, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="13" Foreground="Black" Padding="3" Text="{Binding shapeName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding ElementName=listbox2, Path=SelectedItem.Vendors, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}" Margin="345,87,75,57"
>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="13" Foreground="Black" Padding="3" Text="{Binding mateStyle}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这很好用。但是,我想将 listBox2 绑定到我的视图模型的属性以更新VendorsCollection
. 我想SelectedPart
在我的视图模型上使用“”属性,目前甚至没有使用它。
EF 的全部意义在于将它的所有功能用作 ORM,而不是在我的视图模型中再次构建额外的 ORM 来发送更改通知。据我所见,设置 anICollectionView
是一种相当复杂的方法,但我无法弄清楚绑定。
我不确定下一步是什么,以便我可以PropertyChanged
发出通知并更新我的 Vendors ObservableCollection
,将 listBox2 xaml 绑定到我的视图模型的集合属性。