博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ListView的可编辑化
阅读量:6981 次
发布时间:2019-06-27

本文共 3515 字,大约阅读时间需要 11 分钟。

WPF经常用于显示数据报表,但是使用ListView只能完成显示作用,最近看到一帖子,上面详细讲述了怎么设置。我也尝试的做了一下:

具体操作就是把listview建立celltemplate,然后进行编辑,完成数据处理。

代码如下:

<DockPanel Grid.Row="1">

<ListView x:Name="listView" IsSynchronizedWithCurrentItem="True">
<ListView.Resources>

更改bool属性,满足wpf需要;

<local:BooleanToVisibilyBox x:Key="BooleanToVisibilyBox" />
<local:BooleanToVisibilyBlock x:Key="BooleanToVisibilyBlock" />

<Style x:Key="ListViewItemBlockStyle" TargetType="{x:Type TextBlock}">

<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Width" Value="80" />

定义显示框内容:

<Setter Property="Visibility" Value="{Binding Path=IsSelected,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListViewItem}},
Converter={StaticResource BooleanToVisibilyBlock},
ConverterParameter=False }">
</Setter>
</Style>

定义编辑框内容:

<Style x:Key="ListViewItemBoxStyle" TargetType="{x:Type TextBox}">

<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Width" Value="80" />
<Setter Property="Visibility" Value="{Binding Path=IsSelected,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListViewItem}},
Converter={StaticResource BooleanToVisibilyBox},
ConverterParameter=True}">
</Setter>
</Style>

</ListView.Resources>

<ListView.View>
<GridView AllowsColumnReorder="True">
<GridViewColumn Header="用户号码" Width="80" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Style="{ StaticResource ListViewItemBlockStyle}" Text="{Binding Path=UserPrimaryID}" />
<TextBox Style="{StaticResource ListViewItemBoxStyle}" Text="{Binding Path=UserPrimaryID}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="用户名" Width="80" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Style="{ StaticResource ListViewItemBlockStyle}" Text="{Binding Path=UserName}" />
<TextBox Style="{StaticResource ListViewItemBoxStyle}" Text="{Binding Path=UserName}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="用户密码" Width="80" DisplayMemberBinding="{Binding UserPwd}"/>
<GridViewColumn Width="80" Header="真实姓名">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Style="{StaticResource ListViewItemBlockStyle}" Text="{Binding Path=UserRealName}"></TextBlock>
<TextBox Style="{StaticResource ListViewItemBoxStyle}" Text="{Binding Path=UserRealName}"></TextBox>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</DockPanel>

中途会涉及到BooleanVisibility的设置:代码如下:

public class BooleanToVisibilyBlock:IValueConverter{/// /// 更改对象处理,将bool型数据转换为wpf可用的类型/// /// 需要转换的值/// 目标类型/// 参数/// 设置格式/// 
public object Convert(object value, Type targetType, object parameter, CultureInfo culture){ bool bBoolean = (bool)value; bool target = bool.Parse(parameter.ToString()); if (bBoolean == true) { return Visibility.Hidden; } else { return Visibility.Visible; }}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { Visibility visibility = (Visibility)value; if ( visibility == Visibility.Visible) { return true; } return false; }}

  

有这两步配置,剩下的就是一些繁琐的数据登记了!

如果你在list中设置了button或者其它需要选择的单项,你在MVVM绑定的时候,绑定方式与单独的绑定不相同,需要设置如下:

 Command="{Binding ElementName=LVShowTable,Path=DataContext.UpdateCommand}"

 command="{Binding Path=UpdateCommand,Source={StaticResource XXXViewModel}}"

 

转载于:https://www.cnblogs.com/jiantou1314/p/WPF.html

你可能感兴趣的文章
Unique Binary Search Trees java实现
查看>>
Django内置Admin
查看>>
一个疯狂想法
查看>>
ARM体系结构
查看>>
转:秒杀系统架构分析与实战
查看>>
让MySql支持表情符号(MySQL中4字节utf8字符保存方法)
查看>>
ASP.net(C#)批量上传图片(完整版)
查看>>
第十周课下作业
查看>>
windows 系统常用操作
查看>>
dp 专题
查看>>
CSS3 greyscale 滤镜实现
查看>>
【译文】怎样让一天有36个小时
查看>>
Python全栈开发day2
查看>>
python开发环境搭建
查看>>
c++ 普通高精减
查看>>
(二十一)数组的初始化
查看>>
IHttpHandler 在SharePoint中的应用
查看>>
c# 关闭软件 进程 杀死进程
查看>>
swift集成alamofire的简单封装
查看>>
javascript模块化、模块加载器初探
查看>>