Convert和RelativeSource

it2022-06-23  84

自定义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

转载于:https://www.cnblogs.com/Lulus/p/8158371.html


最新回复(0)