私は現在、2 つの異なる Entity Framework クラスをラップする ObservableCollections にバインドされた 2 つの同期された ListBoxes で構成される単純なアプリケーションを持っています。
listBox1 の Part 項目が選択されると、SelectedItem
のナビゲーション キー情報が 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 として利用することです。私が見たところ、 のセットアップICollectionView
はかなり回りくどい方法ですが、バインディングを理解することができませんでした。
PropertyChanged
通知を発行して Vendors を更新ObservableCollection
し、listBox2 xaml をビューモデルのコレクション プロパティにバインドできるようにするために、次のステップが何であるかはわかりません。