WPF—多值转换器IMultiValueConverter

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

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

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

    /// <summary>
    /// 楼层面积是否可用
    /// </summary>
    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前台界面对定义的多值转换器进行使用

<ComboBox.IsEnabled>
<MultiBinding Converter="{StaticResource FloorAreaEnable}">
                 <Binding ></Binding>
                  <Binding Path="ElevationRange"></Binding>
                  <Binding Path="FloorArea"></Binding>
</MultiBinding>
</ComboBox.IsEnabled>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值