您的位置:首页 > 产品设计 > UI/UE

两个重要的接口:INotifyPropertychanged和IValueConverter

2013-02-11 22:42 316 查看
今天学习了一个重要的接口INotifyPropertychanged,用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知。

若要在将客户端与数据源进行绑定时发出更改通知,则绑定类型应具有下列任一功能:

1.INotifyPropertyChanged interface (preferred)." xml:space="preserve">实现 INotifyPropertyChanged 接口(首选)。

2.为绑定类型的每个属性提供更改事件。

例如,在我正在做的一个连连看应用中,在LLKBlock类引用这样一个接口:

public class LLKBlock:INotifyPropertyChanged
{
private void FirePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged
(this, new PropertyChangedEventArgs(propertyName));
}
}

public event PropertyChangedEventHandler PropertyChanged;
private int x;
private int y;

public int Y
{
get { return y; }
set { y = value; FirePropertyChanged("Y"); }
}
public int X
{
get { return x; }
set { x = value; FirePropertyChanged("X"); }

}
private bool isAlive;

public bool IsAlive
{
get { return isAlive; }
set { isAlive = value; FirePropertyChanged("IsAlive"); }
}
private int picValue;

public int PicValue
{
get { return picValue; }
set { picValue = value; FirePropertyChanged("PicValue"); }
}

}


LLKBlock类中当属性值发生改变时,会像绑定的对象发送一个通知,使绑定值及时更改,这是一个很常用的接口……

另一个重要的接口IValueConverter:

定义:IValueConverter interface and then implement the Convert and ConvertBack methods." xml:space="preserve" style="font-family: 'Segoe UI', Helvetica, Garuda, Arial, sans-serif; line-height: 21px; background-color: rgb(255, 255,
255);">如果要将值转换器与绑定关联,请创建一个实现 IValueConverter 接口的类,然后实现 Convert 和ConvertBack 方法。转换器可以将数据从一种类型更改为另一种类型,根据区域性信息转换数据,或修改表示形式的其他方面。

注意值转换器类的命名方法:通常是将要转换的值在Model中的类型名称作为开头单词,再接上UI中的类型名称,再加上ValueConverter;例如,要定义一个bool类型到visibility类型的类型转换,可以定义类名为:BoolVisibilityValueConverter

接口用法举例:

public class BoolVisibilityValueConverter:IValueConverter
{

public object Convert(object value, Type targetType, object parameter, string language)
{
bool boolType = (bool)value;
if (boolType == true)
{
return Visibility.Visible;
}
else return Visibility.Collapsed;
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}


上例中,为了定义一个bool到visibility的类型转换,我们构建了如上的类来实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: