リストボックスをエンティティフレームワーク(EFコード)にバインドする方法を教えてもらえれば分かります。EFコードリストボックスへの最初のバインド
私はプリズムとmefを使用しています。ボタンとリストボックスの2つのビューがあります。 (各自のプリズム領域内にある)。 ボタンをクリックすると、新しいEmployeeオブジェクトが作成され、エンティティフレームワークを介してデータベースに挿入されます。
問題は、リストボックスに新しく追加されたEmployeeオブジェクトがリストに表示されないということです。この仕事をするために何を変えるべきですか?
コードの一部:
MAINVIEW:
<Grid>
<StackPanel>
<TextBlock Text="Hello From MainView (Core Module)" />
<ListBox ItemsSource="{Binding Employees, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FirstName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
MainViewModel:
namespace EmployeeViewer.Core.ViewModels
{
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class MainViewModel : NotificationObject
{
private IUnitOfWork _UnitOfWork;
[ImportingConstructor]
public MainViewModel(IUnitOfWork unitOfWork) // IEventAggregator eventAggregator
{
this._UnitOfWork = unitOfWork;
Init();
}
private void Init()
{
this.Employees = new ObservableCollection<Employee>(_UnitOfWork.EmployeeRepository.Get());
//this.Employees = new BindingList<Employee>(_UnitOfWork.EmployeeRepository.Get().ToList());
}
public ObservableCollection<Employee> Employees { get; set; }
//public BindingList<Employee> Employees { get; set; }
}}
GenericRepositoryから取得方法:ICommandの(RelayCommandとして実装)は、別の領域とビューでビア
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>,
IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = _DbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).AsEnumerable();//.ToList();
}
else
{
return query.AsEnumerable();//.ToList();
}
}
は、私が作成し、最初のEntity Frameworkのコードに新しい従業員オブジェクトを挿入します。
public ICommand AddEmployeeCommand
{
get { return _AddEmployeeCommand; }
}
private void AddEmployee()
{
_UnitOfWork.EmployeeRepository.Insert(new Employee() { FirstName = "Test", LastName = "Via cmd" });
_UnitOfWork.Save();
}
ObservableCollectionは、EF経由でアイテムが追加されたことを自動的に通知されますか? ListBoxプロパティまたはEmployeesプロパティに新しいオブジェクトを追加することはできません。別のビュー(別の.dllファイルなど)にあるためです。 – juFo
従業員リポジトリへの追加は、ObservableCollectionに自動的に追加されません。 ObservableCollectionに使用するコンストラクタは、単なるコピーメカニズムです。 – jonathanpeppers
他にも追加できますか?ボタンが存在するビュー/ビューモデルでは、Employeesプロパティまたはリストボックスにアクセスするために、他のビュー/ビューモデルへのアクセス権がありません。 これを行う方法に関するご提案はありますか? – juFo