У меня есть куча относительно простых моделей.Все они реализуют общий интерфейс:
public interface IComponent : INotifyPropertyChanged
{
bool IsExpanded { get; }
string Header { get; }
ICommand AddComponentCommand { get; }
ICommand DeleteComponentCommand { get; }
}
Я хочу, чтобы все мои модели представления имели свои собственные DataTemplate
, чтобы они были правильно расположены.Я также хочу, чтобы элементы управления имели заголовок с кнопкой добавления и удаления.Если была нажата кнопка «Добавить», у элемента управления есть содержимое, и оно будет «видимым» при использовании расширителя.
Мне удалось получить DateTemplates
, работающий с ItemsControl
.
C # Main viewmodel
private ObservableCollection<IComponent> _components = new ObservableCollection<IComponent>();
public ObservableCollection<IComponent> Components
{
get => _components;
set => SetField(ref _components, value);
}
xaml:
<ItemsControl ItemsSource="{Binding Components}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Resources>
<!-- FailCost -->
<DataTemplate DataType="{x:Type viewModel:CarViewModel}">
<Border BorderBrush="Black">
<StackPanel>
<TextBlock Text="{Binding Header}"/>
<Button Content="Add" Command="{Binding AddComponentCommand}"/>
<Button Content="Del" Command="{Binding DeleteComponentCommand}"/>
<Expander IsExpanded="{Binding IsExpanded, Mode=OneWay}">
<TextBox Text="{Binding Car.Brand}"/>
</Expander>
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:PersonViewModel}">
<Border BorderBrush="Black">
<StackPanel>
<TextBlock Text="{Binding Header}"/>
<Button Content="Add" Command="{Binding AddComponentCommand}"/>
<Button Content="Del" Command="{Binding DeleteComponentCommand}"/>
<Expander IsExpanded="{Binding IsExpanded, Mode=OneWay}">
<TextBox Text="{Binding Person.Name}"/>
</Expander>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
Однако теперь я должен повторять компоненты заголовка для каждого DataTemplate
.У меня есть общая функциональность в интерфейсе, я не хочу повторять кнопки добавления / удаления и текст заголовка для каждого элемента.Некоторое время я гуглял, но мне кажется, что я скучаю по этой проблеме, потому что не могу найти симуляционные кейсы.
Как добавить общий заголовок ко всем элементам в моем ItemsControl
.
Для ясности: мне не нужен HeaderItemsControl
, мне не нужен мой ItemsControl
, чтобы иметь заголовок.Мне нужны элементы из моего ItemsControl
, чтобы все они имели одинаковый заголовок.