您的位置:首页 > 移动开发 > Objective-C

WPF数据提供者ObjectDataProvider

2016-08-19 11:23 239 查看
最近工作比较忙,学了东西就马上用了,一个月没有写东西了。觉得数据提供者是一个非常有用,用起来十分便捷的东西,所以利用昨晚和今晚的空余时间总结了一下ObjectDataProvider和XmlDataProvider方面的知识,这都算一个主题吧,把数据写在xaml中去让其他元素绑定使用。
先给出应用例子:

数据是不会改变的,其实有很多方式能实现这个效果,但是,这次我要总结的是WPF中强大的绑定功能,那么最方便的方法是什么呢?莫过于使用ObjectDataProvider来提供数据,然后ComboBox中的ItemsSource中绑定数据。
1.ObjectDataProvider
说起这个提供者,我们姑且叫他(是他)对象提供器,这个提供器有两个接口,一个是接收类型的接口,一个接收该类型中方法的接口,类型接口上面还有个输入器(专门用来输入类型构造函数的参数的),方法接口上面也有个输入器(专门用来输入方法的参数的),好了这样一个模型出来了,用起来就方便了。在Xaml中怎么使用这个对象提供器呢???首先这个对象提供器要有个位置站,才能被其他人访问嘛,所以我们在资源中分出一个位置让别的元素访问(通过Key)。另外还有一个需要注意的地方就是:在操作两个输入器的时候,传入的是实参,那么实参就是一个对象,例如int,bool,string等,这些哪来??添加个命名空间:xmlns:sys="clr-namespace:System;assembly=mscorlib"然后所有系统类型都在sys命名空间上了,如果需要创建自定义类型实例,那么,,同理,引用你那个自定义类型的命名空间进xaml中。
说了一下理论,下面来实际做点事情,有意思的事情:
步骤1.准备数据源
这一步需要做的是,新建一个数据提供类,然后在类中创建一个方法来返回数据(静态或者不是静态都行).


我准备了这一个数据源,构造函数和方法都需要传入参数,有两个数据列表,MyColorsList是返回所有颜色中10到20位,SystemColorsList中是所有系统颜色,通过GetColors方法的参数控制返回哪一个。好了数据源准备好了,是时候镶嵌到ObjectDataProvider中去了。

    步骤2.配置ObjectDataProvider





把两个接口(MethodName和ObjectType)接好,然后接口上面的输入器提供好实例。一切准备妥当。下一步是使用

    步骤3.使用亲爱的ObjectDataProvider





绑定Source到ItemsSource上面,有一个有意思的地方就是通过绑定设定SelectedValue的值,绑定自己的ItemsSource的地3个子数据.

下面看效果

即使不用运行,数据一览无余。
(WPF强大啊)

    然后就能使用这些数据绑定到文字,动态改变颜色了~







那么如果需要绑定枚举怎么办?例如系统定义的枚举,例如HorizontalAlignment。Enum类中有一个方法叫GetValues,这个方法

接收一个枚举类型,返回枚举内容的数组,那么运用上面的知识就很容易了。这里的主要难题就是提供的参数不是普通实例,而是类型,怎么办?使用x命名空间的类型扩展点,提供类型名字就能创建一个类型实例。





OK,使用起来也一样的,绑定到ItemsSource中去吧。

-------------------------------------- 实战-----------------------------------------------

下面做一个小东西玩一下:字符计数器

整体:


计数器我通过ObjectDataProvider提供给结果绑定。

这里先说下大概思路:ObjectDataProvider中两个接口接收计数器类型和计数方法,计数方法接收两个参数,一个就是内容(绑定到下面的TextBox中,观察修改),一个就是字符(绑定到上面的textbox中,观察修改),结果就绑定到结果那里。

下面看代码实现:

 计数器类和方法,很简单





前台数据提供器:





两个转换器,一个用来将得到的结果(int类型)转换成String输出到Text中,一个就是用户输入的搜索字符串转变成字符传入到方法中被使用的。





前台代码给出:



这里需要注意的是绑定到ObjectDataProvider中的MethodParameters[1],并且设置BindsDirectlyToSource才能绑定带参数列表。其他的都简单了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: