Skip to content

Convert和RelativeSource

L edited this page Dec 31, 2017 · 2 revisions

自定义Converter

后台Converter类实现接口IValueConverter
方法Convert是值->UI
方法ConvertBack是UI->值
初始化走Convert

public class ColorConvert : IValueConverter
{
	public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
	{
		//value为当前的对象
		var item = value as ListViewItem;
		var view = ItemsControl.ItemsControlFromItemContainer(item);
		var index = view.ItemContainerGenerator.IndexFromContainer(item);

		var data = view.Items[index] as Student;
		if (data.Age == 22)
			return Brushes.Red;
		if (data.Age % 2 == 0)
			return Brushes.Pink;
		else
			return Brushes.DeepSkyBlue;
	}

	public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
	{
		return null;
	}
}

前端

前端引用命名空间,实例化静态资源

<converts:ColorConvert x:Key="MyConvert"></converts:ColorConvert>

将MyConvert绑定给Style

<Style x:Key="Item" TargetType="ListViewItem">
	<!--表明将自身的背景颜色修改-->
	<Setter Property="Background">
		<Setter.Value>
			<!--RelativeSource="{RelativeSource Self}"的Self不能用控件名称代替-->
			<Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource MyConvert}"></Binding>
		</Setter.Value>
	</Setter>
</Style>

使用Style

<!--使用ItemContainerStyle将Style赋给ListView-->
<ListView ItemsSource="{Binding }" ItemContainerStyle="{StaticResource Item}">
	<ListView.View>
		<GridView>
			<GridView.Columns>
				<GridViewColumn Header="姓名" DisplayMemberBinding="{Binding Name}"></GridViewColumn>
				<GridViewColumn Header="年龄" DisplayMemberBinding="{Binding Age}"></GridViewColumn>
			</GridView.Columns>
		</GridView>
	</ListView.View>
</ListView>

示例代码

https://github.com/zLulus/NotePractice/tree/dev3/WPF/WpfDemo/Converts

Clone this wiki locally