winform 数据绑定时转换类型

 很多时候多个控件状态依赖同一个属性,比如使用一个 Label 显示电压,另一个Label根据电压显示“低电/充足”,当然,你可以再定义一个 string 类型的属性,float 类型的电压变更的时候也更新一下这个 string 类型的属性,当这样的情况比较多的时候,就需要多定义很多属性(仅仅是为了给UI控件用),需求变更的时候也容易漏改,所以最好保持尽量少的数据源,这样的话就需要转换类型以适应控件属性,下面是转换的代码

public static Binding MapBinding(
    string propertyName, object dataSource, string dataMember, 
    Func mapper)
{
    var binding = new Binding(propertyName, dataSource, dataMember);
    binding.Format += (sender, args) =>
    {
        if(args.Value is TValue value)
        {
            args.Value = mapper(value);
        }
    };
    return binding;
}


/使用
label2.DataBindings.Add(MapBinding("Text", ViewModel, nameof(ViewModel.Voltage), v => v < 2.6f ? "低电" : "充足"));

你可能感兴趣的:(Windows桌面应用,c#)