【发布时间】:2019-10-27 09:20:27
【问题描述】:
无法将值绑定到Binding 的ConverterParametr。 Binding 只能设置在 DependencyProperty 或 DependencyObject 上。
我很好奇将IValueConverter 转换器实现为DependencyObject。
public class AddConverter : DependencyObject, IValueConverter
{
public static readonly DependencyProperty AddIntegerProperty =
DependencyProperty.Register(nameof(AddInteger),
typeof(int),
typeof(AddConverter),
new PropertyMetadata(0));
public int AddInteger
{
get => (int)GetValue(AddIntegerProperty);
set => SetValue(AddIntegerProperty, value);
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is int intValue)) return 0;
return intValue + AddInteger;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
int intValue;
try
{
intValue = System.Convert.ToInt32(value);
}
catch (Exception)
{
return 0;
}
return intValue - AddInteger;
}
}
让我们在示例视图中使用它。
<TextBox>
<TextBox.Text>
<Binding Path="MyIntegerProperty">
<Binding.Converter>
<local:AddConverter AddInteger="{Binding MyAddIntegerProperty, Mode=OneWay}" />
</Binding.Converter>
</Binding>
</TextBox.Text>
</TextBox>
结果是AddInteger 仍然返回默认值。通过提供的Binding 没有改变AddInteger 的依赖属性是什么原因?
脚注:MultiBinding 对我没有帮助,因为ConvertBack 方法仅包含控件提供的值。这东西也应该在 ViewModel 中解决,但我很好奇有转换器的解决方案。
【问题讨论】:
标签: wpf binding wpf-controls converters