WPF 数据转换器 IValueConverter例子

222
补充展位 Pages_Weblog_Get#0
文章摘要
此内容由人工摘要内容,并由AI根据文章内容进行润色
暂无内容

WPF C# XAML 前端属性转换 IValueConverter

WPF的数据源绑定方式很方便,只需要在页面绑定好对应的属性即可完成数据的展现。但当需要对数据进行转换的时候 直接使用原有数据源就不行了,

打个比方:

我有个习惯,在设计数据库表时 会把代表bool 属性的字段设置为 SMLLINT 类型 (至于为什么这么设计 。。。) 这样在绑定数据源时 该属性输出也就是int16的,这个在后端处理没什么问题,但是展现使用 CheckBok 一类的控件进行展现,此类控件绑定值是bool类型 这时候原有值自然是会报错的,为这一个字段特意创建一个实体模型进行转换 又不够优雅,这时候就可以使用 IValueConverter 来进行处理

先定义一个转换器类 代码如下

 //启用状态 short 转 bool
    [ValueConversion(typeof(short?), typeof(short?))]
    public class EnabledStatusConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, 
		System.Globalization.CultureInfo culture)
        {

            if (value is null|| (short)value == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if ((bool)value == true)
            {
                return 1;
            }
            else
            {
                return null;
            }
        }
    }

前端xaml页面使用例子

//先引用命名空间

xmlns:uc="clr-namespace:IDataConverter"  

如下图

WPF 数据转换器 IValueConverter


<ListView ItemsSource="{Binding}">
                    <ListView.Resources>
                        <uc:EnabledStatusConverter x:Key="EnabledStatusConverter" />
                    </ListView.Resources>
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="启用状态">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox ToolTip="启用状态" 
                                       IsChecked="{Binding Path=EnabledStatus,
                                       Converter={StaticResource EnabledStatusConverter}}" />
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>
补充展位
Pages_Weblog_Get#61af723a-910d-4580-b2a3-a4f8afe7e20a
补充展位 Pages_Weblog_Get#1
补充展位 Pages_Weblog_Get#2
专题推荐
暂无内容
补充展位 Pages_Weblog_Get#3