WPF绑定数据,增删改后实时更新TreeView/ListView

这篇具有很好参考价值的文章主要介绍了WPF绑定数据,增删改后实时更新TreeView/ListView。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

WPF的界面的确好看,也引入了很多新功能,和winform相比更先进更强大......那么狗儿蛋,代价是什么?
代价就是WPF学起来比较费力。

数据绑定是WPF的特色之一,可以省去写代码更新UI界面的工作。这次打算做一个管理数据的小软件,自然的我也打算在界面上弄个TreeView,然后把它和数据源绑定,实现的效果是这样:

WPF绑定数据,增删改后实时更新TreeView/ListView

 OK,起初一切都很顺利。我在设计器里布了一个TreeView,代码是下面这样:

<TreeView x:Name="TreePoints"  AllowDrop="True" >
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:ScanCollection}" ItemsSource="{Binding Points}">
            <materialDesign:ColorZone        Mode="PrimaryLight"        CornerRadius="6" Padding="2">
                <TextBlock Text="{Binding Path=Name}" FontSize="14"/>
            </materialDesign:ColorZone>
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type local:ScanPoint}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}" Margin="4 0"></TextBlock>
                <TextBlock Text="{Binding Converter={StaticResource V3ToStringConverter}}" Margin=" 4 0"></TextBlock>
            </StackPanel>
        </DataTemplate>
    </TreeView.Resources>
</TreeView>

然后准备一个List装数据,在程序初始化时候把TreeView的ItemSource绑好。

 public MainWindow()
        {
            InitializeComponent();            
            scans = new List<ScanCollection>();
            TreePoints.DataContext = scans;
        }

然后调试~~~~

啊咧,当给List添加或者删除成员时,这个界面完全没有反映嘛!

想了想,这是因为C#里,List其实是一个指针,List里面的内容随便怎么变化指针的值是压根不变的。于是WPF就会认为没必要更新界面。

于是解决方案之一就是把TreeView的数据源换成一个新的List,然后再换回来,就像这样:

TreePoints.DataContext = new List<ScanCollections>(){};
TreePoints.DataContext = scans;

这不是找事么...违背了数据绑定的初衷。有没有更好的办法?

搜了一圈,答案是使用ObservableCollection来代替List,那么就动手把数据源改成这样:

scans = new ObservableCollection<ScanCollection>();
TreePoints.DataContext = scans;

运行起来,还是不行。Emm...到底哪里不对

再翻一翻,发现TreeView的绑定中应当指定 UpdateSourceTrigger,因此需要设计器中这样修改:

<TreeView x:Name="TreePoints"  AllowDrop="True" ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged}">

再次编译调试,OK啦文章来源地址https://www.toymoban.com/news/detail-488322.html

到了这里,关于WPF绑定数据,增删改后实时更新TreeView/ListView的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WebSocket实现后端数据变化,通知前端实时更新数据

    背景 ​ 项目中需要做一个消息提示功能,当有用户处理相关待办信息后,别的用户需要实时更新处理后的待办信息。 解决方案: ​ 1、使用最原始的方法,写个定时器去查询待办信息。但这种方式在大多数情况是不被允许的,它会浪费系统中的许多资源,同时也并不是完全

    2024年04月15日
    浏览(49)
  • 小程序弹幕自动滚动实时更新数据功能

    需求 最近遇到的需求,写一个弹幕功能 大致就是实现这样的效果 弹幕轮播,上下两排,一共30个弹幕,30个轮播完毕之后获取新的弹幕数据 实现方法  目前我想到的实现方法是用css的动画来实现这个功能 布局层级 给barrageBox盒子一个相对定位 给barrageList绝对定位 先将list盒子

    2024年01月20日
    浏览(47)
  • vue中组件动态传值,实现数据实时更新

    在一些项目需求中需要父组件向子组件动态传值,比如父组件动态通过axios获取数据,然后传给子组件,子组件根据拿到的数据进行展示。 props传值的时候,只会首次传递绑定的值,不会变化 方式1 利用watch监听props变化 方式2 利用ref获取子组件,调用子组件的方法将值传递过

    2024年02月16日
    浏览(51)
  • Rust采集天气预报信息并实时更新数据

    最近天气温度时高时低,虽说这是大自然的力量人无法抗拒,不能改变那么我们就做预防工作。今天我将用Rust写一个爬虫程序实现电脑桌面实时更新天气情况,这个是一个底层逻辑,需要多方面配合,不仅要有完善的代码还有爬虫IP试试更新才能保证数据最完整最新。 这是一

    2024年01月19日
    浏览(49)
  • 实时数据流无忧:用 SpringBoot 和 SSE 打造动态前端更新的终极指南

    你知道什么是开发者的梦魇吗?慢!慢!慢!在一个需要实时数据更新的应用中,如果数据像乌龟一样慢吞吞地爬行,那用户体验就会像坐过山车一样直线下降。所以今天,我们要化身为数据传输的超级英雄,用 SpringBoot 和 SSE(服务器发送事件)打造一个超酷、超快、而且超

    2024年02月02日
    浏览(44)
  • Android:实时更新时间

    心想着也就是更新精确到分钟,不用精确到秒,定时器就没有必要,系统是有广播 Intent.ACTION_TIME_TICK 可以直接用 动态注册广播 主方法里面调用一下 接收广播并处理 精确到时:分的方法 

    2024年02月15日
    浏览(108)
  • WebSocket 网络协议(实时更新 )

    WebSocket 是一种在客户端和服务器之间建立双向通信信道的网络协议。它在客户端和服务器之间建立一个持久的、全双工的连接,允许数据在两个方向上实时传输,而不需要像HTTP一样进行多次请求和响应。  WebSocket 的主要优势是减少了服务器和客户端之间的通信延迟,因为数

    2024年01月17日
    浏览(50)
  • ClickHouse如何处理实时更新

    本文通过示例介绍如何处理ClickHouse实时更新。OLAP数据库并不欢迎数据变更操作,ClickHouse也不例外,和其他OLAP产品一样,刚开始ClickHouse甚至不支持更新,更新能力是后来才加上的,但是按照ClickHouse方式增加的。当前ClickHouse更新是异步的,使得在交互应用中难以使用。有很多

    2024年02月15日
    浏览(47)
  • CTF常用工具_实时更新

    近期在做一些ctf题,其中会涉及到许多工具,起初我会使用百度网盘在每一篇博客放置对应的工具,但因网盘上传有上限,所以现在我将练习中所用到所有的工具放置在这篇文章中。 需要下载的小伙伴可随时拿取,分享有效期为永久分享。 常用工具及常用网站为实时分享!

    2024年02月04日
    浏览(46)
  • 实时更新天气微信小程序开发

    1.新建一个天气 weather项目 2.在app.json中创建一个路由页面  当我们点击保存的时候,微信小程序会自动的帮我们创建好页面 3.在weather页面上书写我们的骨架  4.此时我们的页面很怪,因为没有给它添加样式和值。此时我们给它一个样式。(样式写在wxss中) 5.给它值,使用插值

    2024年02月01日
    浏览(96)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包