WPF中怎么把窗体上一些控件的内容在关闭时,写到本地,下次窗体启动时,又读取本地数据

chenwg1991 2017-02-02 09:56:55
读取的控件一般就是:文本框,列表框,复选框和单选按钮等;直接通过StreamWriter和StreamReader分别取写呢,可以实现,但是每个窗体都要写不同的代码,感觉有些麻烦,如果能遍历WPF窗体上的所有这些控件,应该也没问题,但是不知道如何遍历,WPF上容器太复杂。
不知道还有没有其他,更简单的方法,写个通用的方法,可以对不同的窗体都实现以上功能!
谢谢老师!
...全文
379 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenwg1991 2017-02-15
  • 打赏
  • 举报
回复
引用 9 楼 sp1234_maJia 的回复:
上边的示例代码可以改一下,如果你不能捕获当前UI模板,那么就先初始化模板
MyFramework.ApplyBinding(new Form1(), new MyModel());
总之,初始化模板不需要保存/恢复,只要处理第二个参数的数据对象即可。
谢谢老师的细心的解答,现在还没学到,不明白,但是有个方向
chenwg1991 2017-02-03
  • 打赏
  • 举报
回复
引用 2 楼 cpycpy000 的回复:
这种想法的,一般是要做成配置文件? 一般可以用MVVM框架,将各个控件的值与变量绑定,然后写一个读写函数操作所有变量就行了 而且你的想法不大对,当一个窗体关闭的同时,它上面的值也就都失去了(除非存在全局静态变量中),所以你不可能在关闭程序的时候去做统一的遍历。
我的想法是,窗体关闭,将控件的内容写入到本地,比如txt文件,WinForm里面我是做的,那个还比较容易些
chenwg1991 2017-02-03
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
从数据的角度出发就容易多了。 WPF提供了很好的数据绑定机制,界面UI可以通过数据绑定来展示数据。 因此,你不必烦心于”遍历WPF窗体上的所有这些控件...“;专注于数据的存盘和载入就可以了。
不知道有没有例子可以借鉴一下
sp1234_maJia 2017-02-03
  • 打赏
  • 举报
回复
上边的示例代码可以改一下,如果你不能捕获当前UI模板,那么就先初始化模板
MyFramework.ApplyBinding(new Form1(), new MyModel());
总之,初始化模板不需要保存/恢复,只要处理第二个参数的数据对象即可。
  • 打赏
  • 举报
回复
纠结于控件的做法是相当复杂的 MVP 编程(跟MVVM模式是相反的),需要大量处理控件细节的手工代码。你可以想象一下,当你重建控件树的时候,程序中大量的动态注册过的事件处理代码逻辑,全都丢失了! 所以对你的需求来说,这个MVP前端编程模式本身就有问题。
  • 打赏
  • 举报
回复
回到 winform 窗体,假设你是比较纯粹的 mvvm 方式开发的,那么你也丝毫不用纠结在“控件”层面了。因为控件界面会轻松地用一句类似
MyFramework.ApplyBinding(new MyModel());
这样的语句就瞬间重建起来。你只要创建一个 VM 数据对象,就能绑定而产生最终界面(窗体或者用户控件)。对于 wpf 更是如此。 所以回到设计层面,你就看看你的前端编程模式是不是这种清晰的分层的,就行了!
  • 打赏
  • 举报
回复
wpf 的前端是基于 xaml 的,这个本来就是文本的。wpf 有直接读取控件(当前最新)xaml和加载 xaml (成为控件)的函数。 不过,这类想法一般都是吃力不讨好的,这样的桌面“崩溃”的几率很小,花费延迟时间去“关闭、打开”画面反而让用户不喜欢;保存/恢复控件的一些皮毛而并不是后台数据,所以你要让用户以MVP方式来编程开发大量细节。所以就好像上面别人已经说过的,保存/恢复用户自定义数据然后绑定到窗体最初的xaml模板即可,根本不用保存变化了的最终控件的xaml。
exception92 2017-02-03
  • 打赏
  • 举报
回复
不需要遍历窗口,你可以把整个前台xaml文件 存储成一个xaml文件到本地,下次启动是使用WPF 的xamlreader类中的load方法,参见: http://blog.csdn.net/laferm/article/details/8934379
cpycpy000 2017-02-02
  • 打赏
  • 举报
回复
这种想法的,一般是要做成配置文件? 一般可以用MVVM框架,将各个控件的值与变量绑定,然后写一个读写函数操作所有变量就行了 而且你的想法不大对,当一个窗体关闭的同时,它上面的值也就都失去了(除非存在全局静态变量中),所以你不可能在关闭程序的时候去做统一的遍历。
Forty2 2017-02-02
  • 打赏
  • 举报
回复
从数据的角度出发就容易多了。 WPF提供了很好的数据绑定机制,界面UI可以通过数据绑定来展示数据。 因此,你不必烦心于”遍历WPF窗体上的所有这些控件...“;专注于数据的存盘和载入就可以了。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧