WPF dataGrid(或 ListView)通过绑定填充,不同的行模板
我有一个 WPF dataGrid,它是通过 DataBinding 填充的。该列表包含不同的列。我有两种类型的行,一种类型包含行中的所有列,另一种类型应跨越所有列的一列。
有没有一种简单的方法可以实现这一点? (也许使用 ListView 而不是 DataGrid?)
我附上了一个屏幕截图,它应该是什么样子:
I现在尝试使用项目模板选择器:
资源中的我的模板(这两个模板不正确,但它们仅用于测试!)
<DataTemplate x:Key="commentTemplate">
<TextBlock Text="{Binding}"/>
</DataTemplate>
<DataTemplate x:Key="normalTemplate">
<Image Source="{Binding }" />
</DataTemplate>
<WPFVarTab:VarTabRowItemTemplateSelector
NormalRowsTemplate="{StaticResource normalTemplate}"
CommentRowsTemplate="{StaticResource commentTemplate}"
x:Key="vartabrowItemTemplateSelector" />
和我的数据网格:
<DataGrid AutoGenerateColumns="False" Margin="0,22,0,22"
Name="dataGrid" Grid.RowSpan="2" CanUserAddRows="True"
RowBackground="Azure" AlternatingRowBackground="LightSteelBlue"
ItemTemplateSelector="{StaticResource vartabrowItemTemplateSelector}" >
和我的模板选择器:
public class VarTabRowItemTemplateSelector : DataTemplateSelector
{
public DataTemplate NormalRowsTemplate { get; set; }
public DataTemplate CommentRowsTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
S7VATRow vRow = item as S7VATRow;
if (vRow == null || string.IsNullOrEmpty(vRow.Comment))
return NormalRowsTemplate;
return CommentRowsTemplate;
}
}
我在 SelectTemplate 的第一行中停止,但这是从来没有打电话过!
I have a WPF dataGrid which is filled via DataBinding. This list contains different columns. I have two types of rows, one type contains all the columns in the rows, and the other should span one column over all the columns.
Is there a easy way to make this possible? (maybe use a ListView instead of a DataGrid?)
I attached a screenshot how it should look like:
I now tried with Item Template Selector:
My templates in the Resources (The two templates are not correct, but they are only for testing!)
<DataTemplate x:Key="commentTemplate">
<TextBlock Text="{Binding}"/>
</DataTemplate>
<DataTemplate x:Key="normalTemplate">
<Image Source="{Binding }" />
</DataTemplate>
<WPFVarTab:VarTabRowItemTemplateSelector
NormalRowsTemplate="{StaticResource normalTemplate}"
CommentRowsTemplate="{StaticResource commentTemplate}"
x:Key="vartabrowItemTemplateSelector" />
and my Datagrid:
<DataGrid AutoGenerateColumns="False" Margin="0,22,0,22"
Name="dataGrid" Grid.RowSpan="2" CanUserAddRows="True"
RowBackground="Azure" AlternatingRowBackground="LightSteelBlue"
ItemTemplateSelector="{StaticResource vartabrowItemTemplateSelector}" >
and my Template Selector:
public class VarTabRowItemTemplateSelector : DataTemplateSelector
{
public DataTemplate NormalRowsTemplate { get; set; }
public DataTemplate CommentRowsTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
S7VATRow vRow = item as S7VATRow;
if (vRow == null || string.IsNullOrEmpty(vRow.Comment))
return NormalRowsTemplate;
return CommentRowsTemplate;
}
}
I put a stop in the first row in SelectTemplate but this is never called!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用项目模板选择器列表视图。或者使用
DataGrid
,也可以在那里使用。 这里是一个示例。You can use item template selector with
ListView
. Or withDataGrid
, it's available there, too. Here is an example.使用绑定来打开和关闭数据行的可见性,如下所示。我假设您定义了列。
检查这个
http://www.wpf-tutorial.com/datagrid-control/details -行/。如果链接损坏,下面粘贴了行和列详细信息的代码供您参考。
代码视图模型
Use binding to turn the visibility of datarow on and off like so. I am assuming you defined columns.
Check this
http://www.wpf-tutorial.com/datagrid-control/details-row/. Incase the link is broken, code for row and column details for your reference is pasted below.
Code view model
数据和评论的视图模型。亦作空地。
模板选择器
xaml
示例
当然,如果您有一种替代模板 - 您不需要模板选择器,可以直接设置模板
viewmodel for data and comment. Also for empty space.
template selector
xaml
example
Of course, if you has one alternative template - you no need template selector and can set template directly