Вы создали Contractors
внутри using (Db db = new Db())
. Ничто вне этого не знает, что это существует, поэтому оно говорит, что это не в текущем контексте.
Объявите за пределами этого, например:
List<ContractorVM> Contractors = new List<ContractorVM>()
, а затем внутри назначьте ему значение, например:
Contractors = db.Contractors.Where(x => x.UserId == userId).ToArray().Select(x => new ContractorVM(x)).ToList();
, и оно должно работать
Есть ли причина, по которой вы не можете использовать CompositeCollection ?
Причина, по которой выдается исключение, заключается в том, что вы не переводите индексы внутренних коллекций к внешнему. Вы просто передаете те же самые аргументы события внешнему событию (в MergedCollection
), поэтому WPF не находит элементы, в которых указывается индекс, чтобы найти их.
Вы используете a CompositeCollection
примерно так:
<ListBox>
<ListBox.Resources>
<CollectionViewSource x:Key="DogCollection" Source="{Binding Dogs}"/>
<CollectionViewSource x:Key="CatCollection" Source="{Binding Cats}"/>
</ListBox.Resources>
<ListBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={StaticResource DogCollection}}"/>
<CollectionContainer Collection="{Binding Source={StaticResource CatCollection}}"/>
</CompositeCollection>
</ListBox.ItemsSource>
<!-- ... -->
</ListBox>
Подробнее см. в этот ответ .
Необходимо сместить индекс события уведомления.
Скажем, вы удаляете элемент из первой коллекции по индексу 2. Событие изменения коллекции запускается с индексом 2.
Если вы удаляете элемент из Во второй коллекции с индексом 2 событие вызывается с тем же индексом (2), но элемент фактически перечисляется после всех элементов в первой коллекции.