Есть 2 вьюмодели, основная и вьюмодель, которая соответствует созданной коллекции
Основная вьюмодель - MainVM. В ней есть команда, имитирующая логику получения, создания и добавления вьюмодели для данной коллекции, а так же добавление полученной коллекции в класс модели данных для последующей работы с ней.
public class MainVM : Notify
{
public ObservableCollection<CollectionVM> CollectionsVM { get; }
public ICommand AddSampleCollectionCommand { get; }
private Collections _collections;
public MainVM()
{
_collections = new Collections();
CollectionsVM = new ObservableCollection<CollectionVM>();
AddSampleCollection = new RelayCommand(AddSampleCollection);
}
private void AddSampleCollection()
{
var collection = new List<SimpleType>();
var vmForCollection = new CollectionVM()
{
Title = "Test title"
};
_collections.Add(collection);
CollectinsVM.Add(_collectinsVM);
}
}
Вьюмодель коллекции - CollectionVM
public class CollectionVM : Notify
{
public string Title { get; }
//Проблема в реализации этой команды.
public ICommand DeleteCommand { get; }
}
Класс для хранения коллекций - Collections. Я не стал копировать его полностью, а описал его структуру кратко.
public class Collections
{
private List<List<SimpleType>> _collestions;
public void Add(List<SimpleType> item) => _collestions.Add(item);
public void Delete(List<SimpleType> item) => _collestions.Remove(item);
}
Сама разметка xaml имеет примерно такой вид. Для отображения вьюмоделей я взял ItemsControl (Мне нужно просто отображать элементы, выделять и т.д их не нужно, по этому и взял его)
<ItemsControl x:Name="CollectionsList"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding CollectionsVM}"
ItemTemplate="{StaticResource CollectionDataTemplate}"
BorderThickness="0">
</ItemsControl>
Ну и xaml ДатаТемплейта
<DataTemplate x:Key="CollectionDataTemplate">
<StackPanel>
<TextBlock Text="{Binding Title}"/>
<Button x:Name="DeleteButton"
Command="{Binding DeleteCommand}"/>
</StackPanel>
</DataTemplate>
Проблема следующая, мне нужно по клику кнопки DeleteButton удалять соответствующую вьюмодель и экземпляр коллекции из класса Collections. Т.к между вьюмоделью и нужным экземпляром класса нету никакой связи, я не понимаю как реализовать удаление и того и другого. Думал добавить во вьюмодель коллекции свойство со ссылкой на нужный экземпляр коллекции, но мне сказали, что так лучше не делать. Подскажите как это грамотно реализовать и возможно что-то полностью переделать в коде выше. Спасибо
... new CollectionVM(this);). Я не знаю почему вам говорят, что это не правильно, вполне стандартное решение. 2. ВCollectionVMреализовать событие, которое будет оповещать о том, что объект надо удалить. При инициализации нового объекта этой VM подписываетесь и выполняете нужные действия. 3. Сделать команду удаления на слой выше (вытащить изCollectionVM) и привязать ее черезRelativeSource(FindAncestor) в XAML. – EvgeniyZ Mar 28 '19 at 23:18