为何IValueConverter的ConverterParameter默认并非可绑定属性?
为什么IValueConverter的ConverterParameter默认不是BindableProperty?
我这个问题不是重复提问,之前被标记重复的帖子只给出了“ConverterParameter不可绑定”的解决办法,但我根本不是来要解决办法的——我就是好奇为什么会有这种限制,为什么ConverterParameter默认不做成BindableProperty?
我已经知道IValueConverter的ConverterParameter不支持绑定,也清楚可以用MultiBinding这类方式绕开,但我现在就想搞明白为什么它不能绑定,仅此而已。
举个实际场景的例子:
C# 代码示例
public enum CoffeeType { Latte, Cappuccino, Americano } public class Coffee { public CoffeeType Type { get; set; } } // 转换器:返回指定类型的咖啡订单总数 public class CoffeeOrdersCount : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is not List<Coffee> coffeeList) return 0; if (parameter is not CoffeeType type) return 0; return coffeeList.Where(c => c.Type == type).Count(); } // ...ConvertBack 实现... }
XAML 代码示例
<!-- 允许用户选择CoffeeType的控件 --> <SomeSelectControl x:Name="UserSelection"/> <!-- 显示所选类型咖啡订单总数的标签 --> <Label Text="{ Binding CoffeeList, Converter={StaticResource CoffeeOrderCountConverter}, ConverterParameter={x:Reference UserSelection.Value}, StringFormat='{}There are {0} Coffee Orders of the Selected Type'}"/>
在我看来这是个非常合理且实用的场景,难道我误解了IValueConverter的设计初衷?
内容的提问来源于stack exchange,提问作者RangerRick
相关产品推荐
相关产品推荐

