ObjectDataProvider学习整理

来源:互联网 发布:eclipse 查看java源码 编辑:程序博客网 时间:2024/05/21 09:10

在MSDN里可以看到,ObjectDataProvider这个类中有很多属性,其中我接触到的几个有:MethodName,MethodParameters,ObjectType和ConstructorParameters

一个个解释一下


ObjectType

MSDN里的解释:要创建其实例的数据类型。 使用x:Type 标记扩展设置类型。
下面是一段代码
<ObjectDataProvider ObjectType="{x:Type local:TemperatureScale}"/>
TemperatureScale是我们在项目中定义的一个类名,即创建一个Student类的实例。


MethodName
MSDN里的解释:要调用的方法的名称。 默认值为 null,是String类型的一个字符串。 
<ObjectDataProvider ObjectType="{x:Type local:TemperatureScale}" MethodName="ConvertTemp"/>

ConvertTemp是TemperatureScale类中的一个方法。


MethodParameters
MSDN里的解释:要传递给该方法的参数列表。 默认值是空列表。 
<ObjectDataProvider ObjectType="{x:Type local:TemperatureScale}" MethodName="ConvertTemp" x:Key="convertTemp">    <ObjectDataProvider.MethodParameters>      <system:Double>0</system:Double>      <local:TempType>Celsius</local:TempType>    </ObjectDataProvider.MethodParameters></ObjectDataProvider>

ConvertTemp这个方法接受两个参数(分别为double类型和enum类型的TempType),作用是将定值从一个温标转到另一个温标。这段代码就是给两个参数赋值,一个是double类型的0,还有一个是enum类型的Celsius(摄氏)。

这样一个ObjectDataProvider实例就完成了。
我们也可以把这个ObjectDataProvider实例作为一个控件的DataContext,方便数据绑定。
<Window.DataContext>        <ObjectDataProvider ObjectType="{x:Type local:TemperatureScale}" MethodName="ConvertTemp" x:Key="convertTemp">    <ObjectDataProvider.MethodParameters>      <system:Double>0</system:Double>      <local:TempType>Celsius</local:TempType>    </ObjectDataProvider.MethodParameters></ObjectDataProvider></Window.DataContext>


ConstructorParameters

MSDN里的解释:要传递给该构造函数的参数列表。默认值为null。

如果不给一个类提供构造函数,那么他的默认构造函数是不带参数的,所以这个参数就传不进去,所以要用到这个属性的话,就要给类提供带参数的构造函数。下面有一个例子。

XAML里的定义如下

<Window x:Class="ObjectDataProvider.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:sys="clr-namespace:System;assembly=mscorlib"        xmlns:local="clr-namespace:ObjectDataProvider"        Title="MainWindow" Height="350" Width="525">    <Window.Resources>        <ObjectDataProvider x:Key="data" ObjectType="{x:Type local:Student}">            <ObjectDataProvider.ConstructorParameters>                <sys:String>ryan</sys:String>            </ObjectDataProvider.ConstructorParameters>        </ObjectDataProvider>    </Window.Resources>    <StackPanel>        <TextBox Text="{Binding Source={StaticResource data}, Path=_StudentName}"></TextBox>    </StackPanel></Window>
在CS文件中有一个Student类,定义了一个构造函数,代码如下:

public class Student    {        public string _StudentName { set; get; }        public Student(string StudentName)        {            this._StudentName = StudentName;        }    }

最后就是像这样的




不知道我的理解对不对,如果有错,希望大家给我指正。


PS:
今天在看别人代码的时候看到这样一个绑定方法
<DataGrid Name="datagrid1" ItemsSource="{Binding Path=Group}" AutoGenerateColumns="True" Height="82" /><TextBox Text="{Binding ElementName=dataGrid1, Path=ItemsSource/ID}"/>
其中Group是一个BindingList<T>类型的集合,他所在的类实现了INotifyPropertyChanged接口 
private BindingList<T> _Group = null; public BindingList<T> Group        {            get            {                if (this._Group == null)                {                    this._Group = new BindingList<T>();                    this._Group.Add(new T{ 初始化 });                 }                return _Group;            }            set            {                _Group = value;                OnPropertyChanged("Group");            }        }
觉得挺有意思的,又学到了一种数据绑定的方法。