请问下WPF窗体控件的有关问题

请教下WPF窗体控件的问题
本帖最后由 qq175265664 于 2015-02-03 17:48:06 编辑
请教下各位大哥大姐,如何给动态创建的GRID下的      StackPanel 的子控件赋值

是在控件创建成之后赋值
------解决思路----------------------
没看懂你具体问什么问题。

其实尽量不要过度考虑什么“动态创建”的问题。前端程序应该反过来考虑设计问题,以 MVVM 设计模式为准,你的大部分程序代码不应该依赖任何控件,相反地是大量界面依赖后台程序代码(也就是ViewModel对象的属性)。控件布局和内容,应该自动双向绑定到 ViewModel 对象上。坚持 MVVM 模式,你的代码才能清爽,程序才能不“绕”,扩展起来也非常方便。

唯一需要学习的,就是如何在 xaml 中将界面控件各个部分绑定到一个 ViewModel 的各个属性上的问题。包括绑定一个集合数据,以及集合中每一个单元作为子控件(模板中的控件)的ViewModel。


一开始,你觉得学习“白手起家,全都从低级的代码来控制控件,没有压力”,甚是有的人觉得写代码越多越关荣。其实这是一个陷阱。代码越少越好、越傻瓜越好。应该花多些时间学习前端数据绑定语法,尽量不要用你的代码去直接操作UI控件。你会很少提出这类问题,会得到真正的实惠。
------解决思路----------------------
实际上,任何前端开发都有这种问题。比较低级时,总觉得直接用代码去“动态创建”控件最为方便、感觉自己的代码“好强大”。实际这都是一个错觉。

好的设计模式,是代码尽量不依赖于控件,反而是控件绑定到代码。不论是wpf、silverlight、asp.net、html/javascript等前端程序开发,都是如此。一些框架控件已经可以自动根据代码(ViewModel)绑定集合、绑定属性、以及重复子控件中的属性。

如果一个前端开发工具没有这种功能,还停留在15年前的意识水平,那么你就可以选择新的、傻瓜式地绑定UI的工具了。
------解决思路----------------------
我给你举一个例子。比如说你的Grid下边有一个“加载更多数据”的按钮,但是你希望当已经加载了100条记录之后,让这个按钮失效(不再允许用户按下去了)。你是让你的的“加载更多数据”的后台代码去设置这个按钮的enable呢?还是后台代码根本不管这个约束呢?

当然是后者。后台代码根本不考虑什么约束问题。你只要将按钮的enable属性与表达式“Items.Count()<100”或者表达式“Items.Count()<n”绑定起来(可能需要自己写一个ValueConverter),这样来虽然在设计时需要搞懂 xaml 设计和数据绑定语法,但是你的代码是不需要围着千变万化的前端UI的变化而打转转的。

那样,你问这种问题的机会就少了。
------解决思路----------------------
使用binding或者在创建成功之后 找到子控件赋值。
------解决思路----------------------
也就是  在后台 指定grid或者stackpanel 的DataContext,通过setBinding方法  将值绑定到textblock或者其它,再作为子控件添加到stackpanel中。