个人对wpf的一些浅见(一)

个人对wpf的一些浅见(一)

1.提到wpf都会提到mvvm模式:
提到mvvm我们还是得先说mvc,mvvm实际上是对mvc模式的一种改进。
MVC 即 Model-View-Controller,View表示界面,model处理的是数据库数据,而Controller则用作协调view和model。mvc的目的是要将软件界面和用户的业务分开来,从而使得代码的拥有很强的灵活性、可复用性、可维护性、可扩展性。打个比方,一个View想要提交用户输入的数据给Model进行处理以实现逻辑,View不直接和Model说要处理某某数据,而是和Controller说要处理某某数据,然后Controller再和model说要处理某某数据,最后处理数据的是model,这与三层架构(UI-BLL-DAL)不同,三层架构处理逻辑的地方是在BLL处。
而mvvm即Model-View-ViewModel,View表示界面,负责与用户交互,接收用户输入,把数据展现给用户,ViewModel表示视图界面,负责收集需要绑定的数据和命令,聚合Model对象,通过View类的DataContext属性绑定到View,同时也可以处理一些UI逻辑。Model表示系统中的对象包含该model本身该有的一些属性和行为,View对应一个ViewModel,ViewModel可以聚合N个Model,ViewModel可以对应多个View。MVVM 采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然

2.依赖属性
依赖属性是wpf对普通的C#属性进行了包装之后的产物。依赖属性加入了属性变化通知、限制、验证等功能,它内部实现使用哈希表存储机制,对多个相同控件的相同属性的值都只保存一份
类继承DependencyObject类声明DependencyProperty 对象,并注册。如:

public class Person : DependencyObject
    {
        public static readonly DependencyProperty nameProperty;
        public string Name
        {
            get { return (string)GetValue(nameProperty); }
            set { SetValue(nameProperty, value); }
        }
       
        static Person()
        {
           DependencyProperty nameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Person), 
                new PropertyMetadata("Learning Hard",OnValueChanged)); 
        }

        private static void OnValueChanged(DependencyObject dpobj, DependencyPropertyChangedEventArgs e)
        {
        }
}

依赖属性是通过调用DependencyObject的GetValue和SetValue来对依赖属性进行读写的,Hash表中的Key就是属性的HashCode值,而值(Value)则是注册的DependencyPropery;而C#中的属性是类私有字段的封装,可以通过对该字段进行操作来对属性进行读写。
注意因为事件调用依赖属性不能跨线程使用

3.附加属性
附加属性就是自己没有这个属性,在某些上下文中需要就被附加上去
RegisterAttached

4.皮肤
wpf要做皮肤非常容易,写出数个样式,根据不同情况加载不同样式即可。

5.Binding机制
目标:数据改变界面随之改变
实现接口:INotifyPropertyChanged
当相关属性值发生变化时PropertyChanged事件就会被激发,Binding接收到这个事件后就去通知view刷界面
基于消息机制,需注意回调和事件监听释放

6.转换器
分为单值转换的接口IValueConverter和多值转换的接口IMultiValueConverter
当binding将值传到UI界面时调用,注意value==null时转化 if (value == null) return DependencyProperty.UnsetValue;

7.选择器
用于控件或界面根据不同情况选择不同样式:
选择器不但可以被索引而且可以被选择
SelectedIndex——非负的整型数,它表示哪个Item 被选择了,如果没有东西被选择,则用1 表示。Item是根据被添加到集合中的顺序来计数的。SelectedItem——当前被选中的Item 的实例

8.自定义控件
Wpf的控件事实上是以binding机制和icommamd接口在界面上画出来的,所以要自定义一个控件也可以用同样的方法。注意:如需多个控件拼成一个应特别注意焦点和选中

9.命令系统
实现ICommand 接口,实际也是一种事件机制

10.缺点
WPF中TextBox在.NET 4.5无法输入浮点数,解决办法:

占资源,解决办法:
自己申请的对象自己释放,尽量减少资源占用

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值