WPF—多值转换器IMultiValueConverter

        在实际的开发中,经常会有这样的需要,当一个属性变化时,需要其他属性一起联动发生变化。这种变化如果只是后台之间属性之间的约束,直接写在后台代码中也无所谓,甚至可以说是这样组织是一个不错的策略。

         但是,如果这种变化只体现在界面的联动效果上,比如属性A的变化,影响到属性B在界面上是否可以编辑。在这种场景中,如果后台代码过分干预前台的显示效果,反而显得设计过于耦合了。我们可以把这种变化,通过转换器在前台实现控制。WPF的转换器分为单值转换器,和多值转换器。既然是属性变化影响的是其他属性的先关显示,这样的情况使用单值转换器就很难起到灵活监控属性变化的作用了。这里就引入了多值转换器。

1、实现一个多值转换器,继承IMultiValueConverter

    /// 
    /// 楼层面积是否可用
    /// 
    public class FloorAreaEnableConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            try
            {
                if (values == null || !values.Any())
                    return false;
                BuildingFunction function = values[0] as BuildingFunction;
                if (function == null)
                    return false;
                var enable = function.ElevationRange != null && function.ElevationRange.ToString() == ">24m";
                if (!enable&&!string.IsNullOrWhiteSpace(function.FloorArea))
                    function.FloorArea = string.Empty;
                return enable;
            }
            catch (Exception)
            {

                return false;
            }
        }


        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

2、在WPF前台界面对定义的多值转换器进行使用



                 
                  
                  

 

 

你可能感兴趣的:(WPF基础细节,C#基础,实践“出”坑,wpf)