带有 GridViewColumn 和 DataTemplate 的 WPF ListView

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4725352/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 22:31:10  来源:igfitidea点击:

WPF ListView with GridViewColumn and DataTemplate

wpflistviewdatatemplategridviewcolumn

提问by Ready Cent

I have a CheckedListBoxcontrol which is created by adding a DataTemplatewith a CheckBoxto a ListView. The problem is that I need columns too.

我有一个CheckedListBox控件,它是通过将 a 添加到DataTemplateaCheckBox来创建的ListView。问题是我也需要列。

The following code doesn't display the check boxes:

以下代码不显示复选框:

<ListView x:Name="lbDatabases" Height="138" Width="498" Canvas.Left="44" Canvas.Top="146">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding DbName}" Header="Databases" Width="498"/>
        </GridView>
    </ListView.View>
    <ListView.ItemTemplate>
        <DataTemplate>                    
            <CheckBox IsChecked="{Binding IsActive}" Checked="AnyChange" Unchecked="AnyChange"  Style="{x:Null}" Content="{Binding DbName}"
                      Width="{Binding CheckWidth}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

However, if I comment out this code, everything works fine but no columns:

但是,如果我注释掉这段代码,一切正常,但没有列:

<ListView.View>
    <GridView >
        <GridViewColumn DisplayMemberBinding="{Binding DbName}" Header="Databases" Width="498"/>
    </GridView>
</ListView.View>

Is there any way to have it all?

有什么办法可以拥有这一切吗?

回答by Pavlo Glazkov

You need to define the data template as CellTemplate for your column:

您需要为您的列定义数据模板为 CellTemplate:

<ListView x:Name="lbDatabases" Height="138" Width="498" Canvas.Left="44" Canvas.Top="146"  >
    <ListView.View >
        <GridView >
            <GridViewColumn Header="Databases" Width="498">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding IsActive}" Checked="AnyChange" Unchecked="AnyChange"  Style="{x:Null}" Content="{Binding DbName}"
                                  Width="{Binding CheckWidth}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

回答by Ready Cent

ok after struggling all morning I figured it out. They key here is to use a CellTemplate:

好吧,经过一上午的努力,我想通了。这里的关键是使用 CellTemplate:

 <ListView x:Name="lbDatabases" Height="138" Width="498" Canvas.Left="44" Canvas.Top="146"  Style="{StaticResource ListViewStyle}">
        <ListView.View >
            <GridView>
                <GridViewColumn Header="Databases" Width="498">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                        <CheckBox IsChecked="{Binding IsActive}" Checked="AnyChange" Unchecked="AnyChange"  Style="{x:Null}" Content="{Binding DbName}"
                   Width="{Binding CheckWidth}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>            
    </ListView>