[.Net码农][WPF] ListView 中 View 的模板替换(添加/删除列)
2015-03-25 14:55
411 查看
[WPF] ListView 中 View 的模板替换(添加/删除列)
=====================================================
今天在网上闲逛,突然发现这边文章竟然被人毫不尊重原作者权益而胡乱转载,让人气愤。
本着知识共享的目的,欢迎大家转载,但是转载请保留本文的原始链接,谢谢!
本文原作者:YuanHui
联系方式:khler@163.com
原文地址:/article/5193784.html
=====================================================
在WPF中使用ListView,往往需要根据情况隐藏或显示ListView的某一列,我们当然可以通过代码来对付它(利用VisualTreeHelper.GetChild(listView)来得到某一个Column,然后隐藏它),但是,既然使用了WPF,我们就要入乡随俗,使用模板来处理。其实模板是个好东西,他提供了非常便利的定制机制,你可以把任意可视元素定义的面目全非——当然如果你愿意
![](http://www.cnblogs.com/Emoticons/QQ/laf.gif)
。
为了增减ListView的Column,我们只需定义多个GridView资源,在运行时根据不同情况使用不同资源,就可以达到增减Column的目的。这里其实都算不上是真正的模板替换。
本文附带源代码可以在这里下载到:TestListViewColumnCustom.rar
下面就开始吧!
老规矩,拖出VS2008,Create new project->WPF Application,名字就叫TestListViewColumnCustom吧,我一贯以“Test”开头命名工程,这样表明这是一个测试项目,是对ListViewColumnCustom所做的测试工程。点击OK后进入Window1.xaml设计界面,拽一个ListView进主窗口(听说通过敲Xaml代码来创建控件而不是通过“拽”来创建控件的人都是牛人,所以我喜欢敲代码;当然了,在WPF设计器不成熟的早期阶段,很多控件定制后显示不正常,你不敲代码还能去敲微软?),添加几个Column,并为窗口添加几个Label、CheckBox,运行结果如下:
![](http://images.cnblogs.com/cnblogs_com/khler/TestListViewColumnCustom2.gif)
图1 界面
Xaml代码如下:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Window x:Class="TestListViewColumnCustom.Window1"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Title="Window1" Height="300" Width="300">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Grid>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Grid.RowDefinitions>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<RowDefinition Height="42"/>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<RowDefinition Height="32"/>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<RowDefinition/>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<RowDefinition Height="60"/>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</Grid.RowDefinitions>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Label Margin="5" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" Foreground="Maroon">List View Column Custom</Label>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<CheckBox Margin="5" Grid.Row="1" Grid.Column="0" Click="CheckBox_Click" VerticalAlignment="Center">Hide Last Column</CheckBox>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<ListView Name="listView1" Margin="5" Grid.Row="2" Grid.Column="0">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<ListView.View>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="Name"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="A" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="B" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="WillBeHiden"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</GridView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</ListView.View>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</ListView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<StackPanel Margin="5" Grid.Row="3" Grid.Column="0">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Label Foreground="Maroon">Author:He,YuanHui</Label>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Label Foreground="Maroon">Date: 2008.7.10</Label>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</StackPanel>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</Grid>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</Window>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
给ListView添加两个(任意多个)GridView资源,拥有不同的Columns:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Window.Resources>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridView x:Key="haveHidnColumn">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="Name"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="A" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="B" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="WillBeHiden"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</GridView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridView x:Key="haveNoHidnColumn">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="Name"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="A" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="B" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</GridView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</Window.Resources>
为CheckBox添加Click处理事件:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private void CheckBox_Click(object sender, RoutedEventArgs e)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// select different template
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
CheckBox checkBox = sender as CheckBox;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (checkBox.IsChecked == true)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.View = this.Resources["haveNoHidnColumn"] as GridView;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.View = this.Resources["haveHidnColumn"] as GridView;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// rebinding data
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.ItemsSource = null;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.ItemsSource = dataList;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
运行,点击CheckBox,可以发现最后一列可以动态“删除”:
![](http://images.cnblogs.com/cnblogs_com/khler/TestListViewColumnCustom3.gif)
图2 WillBeHiden列将被删除
勾选CheckBox:
![](http://images.cnblogs.com/cnblogs_com/khler/TestListViewColumnCustom4.gif)
图3 WillBeHiden列被删除
为了显得更加真实,上面绑定了数据:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public Window1()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
InitializeComponent();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// init data
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for (int i = 0; i < 5; i++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataList.Add(new Data());
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataList[i].Name = "data" + (i + 1).ToString();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataList[i].A = 1.0 + i / 10.0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataList[i].B = 2.0 + i / 10.0;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.ItemsSource = dataList;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
简单总结一下:思想就是,在资源中定义具有不同Column的资源,根据程序需要,为ListView绑定不同GridView,达到动态修改ListView的列的目的。
注意,由于数据绑定的关系,替换模板后需要重新绑定一下数据:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
// rebinding data
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
this.listView1.ItemsSource = null;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
this.listView1.ItemsSource = dataList;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
分类:
WPF,
C#,
工作随笔
标签:
WPF, ListView,
View,
模板替换,
删除或增加列
绿色通道: 好文要顶
关注我
收藏该文与我联系
![](http://static.cnblogs.com/images/icon_weibo_24.png)
![](http://pic.cnitblog.com/face/u35878.png)
He,YuanHui
关注 - 9
粉丝 - 31
+加关注
=====================================================
今天在网上闲逛,突然发现这边文章竟然被人毫不尊重原作者权益而胡乱转载,让人气愤。
本着知识共享的目的,欢迎大家转载,但是转载请保留本文的原始链接,谢谢!
本文原作者:YuanHui
联系方式:khler@163.com
原文地址:/article/5193784.html
=====================================================
在WPF中使用ListView,往往需要根据情况隐藏或显示ListView的某一列,我们当然可以通过代码来对付它(利用VisualTreeHelper.GetChild(listView)来得到某一个Column,然后隐藏它),但是,既然使用了WPF,我们就要入乡随俗,使用模板来处理。其实模板是个好东西,他提供了非常便利的定制机制,你可以把任意可视元素定义的面目全非——当然如果你愿意
![](http://www.cnblogs.com/Emoticons/QQ/laf.gif)
。
为了增减ListView的Column,我们只需定义多个GridView资源,在运行时根据不同情况使用不同资源,就可以达到增减Column的目的。这里其实都算不上是真正的模板替换。
本文附带源代码可以在这里下载到:TestListViewColumnCustom.rar
下面就开始吧!
老规矩,拖出VS2008,Create new project->WPF Application,名字就叫TestListViewColumnCustom吧,我一贯以“Test”开头命名工程,这样表明这是一个测试项目,是对ListViewColumnCustom所做的测试工程。点击OK后进入Window1.xaml设计界面,拽一个ListView进主窗口(听说通过敲Xaml代码来创建控件而不是通过“拽”来创建控件的人都是牛人,所以我喜欢敲代码;当然了,在WPF设计器不成熟的早期阶段,很多控件定制后显示不正常,你不敲代码还能去敲微软?),添加几个Column,并为窗口添加几个Label、CheckBox,运行结果如下:
![](http://images.cnblogs.com/cnblogs_com/khler/TestListViewColumnCustom2.gif)
图1 界面
Xaml代码如下:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Window x:Class="TestListViewColumnCustom.Window1"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Title="Window1" Height="300" Width="300">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Grid>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Grid.RowDefinitions>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<RowDefinition Height="42"/>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<RowDefinition Height="32"/>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<RowDefinition/>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<RowDefinition Height="60"/>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</Grid.RowDefinitions>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Label Margin="5" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" Foreground="Maroon">List View Column Custom</Label>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<CheckBox Margin="5" Grid.Row="1" Grid.Column="0" Click="CheckBox_Click" VerticalAlignment="Center">Hide Last Column</CheckBox>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<ListView Name="listView1" Margin="5" Grid.Row="2" Grid.Column="0">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<ListView.View>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="Name"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="A" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="B" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="WillBeHiden"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</GridView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</ListView.View>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</ListView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<StackPanel Margin="5" Grid.Row="3" Grid.Column="0">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Label Foreground="Maroon">Author:He,YuanHui</Label>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Label Foreground="Maroon">Date: 2008.7.10</Label>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</StackPanel>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</Grid>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</Window>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
给ListView添加两个(任意多个)GridView资源,拥有不同的Columns:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<Window.Resources>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridView x:Key="haveHidnColumn">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="Name"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="A" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="B" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="WillBeHiden"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</GridView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridView x:Key="haveNoHidnColumn">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="Name"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="A" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<GridViewColumn Header="B" Width="60"></GridViewColumn>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</GridView>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</Window.Resources>
为CheckBox添加Click处理事件:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private void CheckBox_Click(object sender, RoutedEventArgs e)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// select different template
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
CheckBox checkBox = sender as CheckBox;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (checkBox.IsChecked == true)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.View = this.Resources["haveNoHidnColumn"] as GridView;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.View = this.Resources["haveHidnColumn"] as GridView;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// rebinding data
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.ItemsSource = null;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.ItemsSource = dataList;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
运行,点击CheckBox,可以发现最后一列可以动态“删除”:
![](http://images.cnblogs.com/cnblogs_com/khler/TestListViewColumnCustom3.gif)
图2 WillBeHiden列将被删除
勾选CheckBox:
![](http://images.cnblogs.com/cnblogs_com/khler/TestListViewColumnCustom4.gif)
图3 WillBeHiden列被删除
为了显得更加真实,上面绑定了数据:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public Window1()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
InitializeComponent();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// init data
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for (int i = 0; i < 5; i++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataList.Add(new Data());
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataList[i].Name = "data" + (i + 1).ToString();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataList[i].A = 1.0 + i / 10.0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dataList[i].B = 2.0 + i / 10.0;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.listView1.ItemsSource = dataList;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
简单总结一下:思想就是,在资源中定义具有不同Column的资源,根据程序需要,为ListView绑定不同GridView,达到动态修改ListView的列的目的。
注意,由于数据绑定的关系,替换模板后需要重新绑定一下数据:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
// rebinding data
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
this.listView1.ItemsSource = null;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
this.listView1.ItemsSource = dataList;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
分类:
WPF,
C#,
工作随笔
标签:
WPF, ListView,
View,
模板替换,
删除或增加列
绿色通道: 好文要顶
关注我
收藏该文与我联系
![](http://static.cnblogs.com/images/icon_weibo_24.png)
![](http://pic.cnitblog.com/face/u35878.png)
He,YuanHui
关注 - 9
粉丝 - 31
+加关注
相关文章推荐
- [WPF] ListView 中 View 的模板替换(添加/删除列)
- 使用RecyclerView实现滑动添加、滑动删除,以及瀑布流、ListView、GridView的转换
- ListView添加删除FooterView java.lang.Class Cast Exception: android.widget.HeaderViewListAdapter
- 精通RecyclerView:打造ListView、GridView、瀑布流;学会添加分割线、 添加删除动画 、Item点击事件
- 步步为营VS 2008 + .NET 3.5(9) - DLINQ(LINQ to SQL)之执行SQL语句的添加、查询、更新和删除
- 步步为营VS 2008 + .NET 3.5(10) - DLINQ(LINQ to SQL)之调用存储过程的添加、查询、更新和删除
- 步步为营VS 2008 + .NET 3.5(9) - DLINQ(LINQ to SQL)之执行SQL语句的添加、查询、更新和删除
- 步步为营VS 2008 + .NET 3.5(9) - DLINQ(LINQ to SQL)之执行SQL语句的添加、查询、更新和删除
- 步步为营VS 2008 + .NET 3.5(8) - DLINQ(LINQ to SQL)之面向对象的添加、查询、更新和删除
- [VB.NET].net中的listview能不能添加相同的记录?100分求教!
- 步步为营VS 2008 + .NET 3.5(8) - DLINQ(LINQ to SQL)之面向对象的添加、查询、更新和删除
- GridView模板列中添加CheckBox 实现全选、删除
- 再接再厉VS 2008 sp1 + .NET 3.5 sp1(1) - Entity Framework(实体框架)之添加、查询、更新和删除的Demo
- .Net 2005 中通过MasterPage来更方便实现网站模板替换
- 8、步步为营VS 2008 + .NET 3.5(8) - DLINQ(LINQ to SQL)之面向对象的添加、查询、更新和删除
- 9、步步为营VS 2008 + .NET 3.5(9) - DLINQ(LINQ to SQL)之执行SQL语句的添加、查询、更新和删除
- 步步为营VS 2008 + .NET 3.5(14) - XLINQ(LINQ to XML)之针对XML文件的添加、查询、更新和删除
- 为GirdView添加鼠标移动样式及删除确认
- .net 对xml文件的读写,添加,修改,删除操作
- 步步为营VS 2008 + .NET 3.5(10) - DLINQ(LINQ to SQL)之调用存储过程的添加、查询、更新和删除