WPF中如何将ItemsControl数据源属性传入转换器参数?
WPF绑定转换器问题
代码示例
<ItemsControl Name="itemsControl"> <ItemsControl.ItemTemplate> <DataTemplate> <ToggleButton Style="{StaticResource ToggleButtonInputControl}"> <Grid> <local:CustomTextBox StringInTextBox="{Binding Path=UIntProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={local:UIntConverter Param=123}}"/> </Grid> </ToggleButton> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
场景说明
该ItemsControl的数据源为代码中设置的MyClass类型ObservableCollection,MyClass包含UIntProperty属性。UIntConverter继承自MarkupExtension,拥有uint类型的Param属性。
目标
通过CustomTextBox编辑UIntProperty,需满足:
- 输入非数值时不修改
UIntProperty; - 输入为空时将
UIntProperty设为0并显示该值。
已尝试方案
- 使用
StringInTextBox依赖属性的CoerceValueCallback和PropertyChangedCallback,但绑定触发优先级更高,转换器会先修改UIntProperty; - 新增中间string属性绑定至
StringInTextBox,但需要为MyClass的多个属性逐一实现,扩展性差; - 让
UIntConverter返回null,但需将UIntProperty改为可空类型,不符合原有类型设计。
疑问
尝试将原始UIntProperty传入转换器的Param,直接写Param=UIntProperty无效,想了解:
- 如何将
UIntProperty传入Param或转换器参数? - 若
UIntConverter作为StaticResource,能否给Param传值?
问题解决更新
已通过在ConvertBack方法中返回Binding.DoNothing解决问题,同时明确了ConverterParameter的适用场景:它不适用于传递依赖于对象的值,仅用于明确转换类型。
内容的提问来源于stack exchange,提问作者Hans GD
相关产品推荐
相关产品推荐

