我想要一个字符串DependencyProperty
它可以处理分配给一个可为空的数值(如文本框TextProperty
一样)。字符串DependencyProperty为可为空
我基本上从TextBox
复制反编译的代码,并将其更改为我创建的DependencyProperty
。
[DefaultValue(null)]
//[DefaultValue(string.Empty)]
[Localizability(LocalizationCategory.Text)]
public string Number
{
get { return (string)GetValue(NumberProperty); }
set { SetValue(NumberProperty, value); }
}
public static readonly DependencyProperty NumberProperty =
DependencyProperty.Register(
"Number", // Property name
typeof(string), // Property type
typeof(NumberControl), // Property owner
new FrameworkPropertyMetadata(// Property metadata
null, // default value
//string.Empty, // default value
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | // Flags
FrameworkPropertyMetadataOptions.Journal,
OnNumberPropertyChanged, // property changed callback
CoerceText,
true, // IsAnimationProhibited
UpdateSourceTrigger.PropertyChanged // DefaultUpdateSourceTrigger
));
private static object CoerceText(DependencyObject d, object value)
{
var sv = value as string;
if (sv == String.Empty) return null;
return value;
//if(value == null) return string.Empty;
}
private static void OnNumberPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var tb = (NumberControl) d;
if (tb.Number != tb.Text)
{
tb.Text = tb.Number;
}
}
但是,当该属性绑定到小数?这是发生
System.Windows.Data Error: 7 : ConvertBack cannot convert value '' (type 'String'). BindingExpression:Path=DecimalProperty; DataItem='MainWindowViewModel' (HashCode=58431997); target element is 'NumberControl' (Name=''); target property is 'Number' (type 'String') FormatException:'System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Convert.ToDecimal(String value, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'
注意除外:我想离开默认的String.Empty行为,没有工作,我所提供的代码尝试空它也不起作用
TextBox.Text
指定了其他一些默认转换器吗?
你可以添加你的财产对你的问题有约束力吗? – ckruczek
它绑定的属性是小数?实现OnPropertyChanged(),但可以是任何可为空的结构,例如,int?,decimal ?, double ?,等等......没什么特别的。我不认为它现在需要实际的财产,我已经知道需要做什么。 –
Jop我已经看到并投票了你的答案。很高兴你找到答案并与我们分享;) – ckruczek