У меня есть WPF ListView, в котором Grid имеет вид ItemsPanelTemplate. Я отображаю свои элементы в правильном столбце и строке, основываясь на свойстве элемента. Но я хотел бы поместить некоторые элементы управления в пустые ячейки моей сетки.
Это упрощенная версия моего кода и xaml:
В ресурсах:
<ItemsPanelTemplate x:Key="TheTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
В xaml:
<Controls:CustomListView ItemsSource="{Binding TheCollection}"
ItemsPanel="{DynamicResource TheTemplate}">
</Controls:CustomListView>
Наконец, в моем CustomListView:
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
var viewModel = item as DomainObject;
if (viewModel != null)
{
element.SetValue(Grid.ColumnProperty, 1); //here I work with a converter, but this just simplifies it for StackOverflow
element.SetValue(Grid.RowProperty, 1);
}
}
ПРИМЕЧАНИЕ. Я знаю, что я работаю с DomainObject, но просто потерпите меня, пожалуйста.
Что мне это даст, это сетка с элементами в правильной строке и столбце. Но что, если я хочу отобразить что-то в пустых ячейках, например, какой-нибудь текст типа «ноль»?
Я не могу просто добавить его в свой шаблон, поскольку это приводит к сбою приложения, говоря, что ItemsControl создаст необходимые элементы управления. Я пытался получить доступ к сетке / шаблону в коде позади, но не могу найти, как это сделать. Может быть, я не должен использовать ListView? Может быть есть другие / лучшие решения?