我有一個WPF ListView,其中有一個Grid作爲ItemsPanelTemplate。我根據物品的屬性在正確的列和行中顯示我的物品。但我想在我的網格的空單元格中添加一些控件。將控件添加到GridView的ListPanelTemplate中的空單元格
這是我的代碼和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,但請耐心等待。
這會給我什麼,是一個正確的行和列中的項目的網格。但是如果我想在空單元格中顯示某些內容,例如某些文本(如'null'),該怎麼辦?
我不能將它添加到我的模板中,因爲這會使應用程序崩潰,並說ItemsControl將創建必要的控件。我嘗試訪問代碼隱藏的網格/模板,但不能完全找到如何。也許我不應該使用ListView?也許還有其他更好的解決方案?