Как закрыть пользовательский элемент управления из его модели представления

Я создал свой UserControl как это:

MyUserCtrl myctrl = new MyUserCtrl() { DataContext = new MyViewModel()};
ControlCollection.Add(myctrl);

и я вывожу его используя это ItemsControl ItemsSource="{Binding ControlCollection}" на вид.

Это чисто и красиво, но проблема в том, что я не знаю, как я могу закрыть эти UserControls что я открыл.

А что если я просто уберу его в коллекцию. Таким образом модель представления тоже закроется?

1 ответ

Решение

Не назначайте коллекцию элементов пользовательского интерфейса для ItemsSource ItemsControl. Вместо этого поместите элемент пользовательского интерфейса в ItemsControl's ItemTemplate и передать коллекцию экземпляров модели представления в ItemsSource.

<ItemsControl ItemsSource="{Binding MyItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <local:MyUserCtrl />
        </DataTemplate>
    </ItemsCControl.ItemTemplate>
</ItemsCControl>

Добавьте элемент модели представления в свойство коллекции в вашей "основной" модели представления:

var item = new MyViewModel();
MyItems.Add(item);

Чтобы "закрыть" элемент управления, удалите соответствующий элемент из коллекции:

MyItems.Remove(item);
Другие вопросы по тегам