我想要一個字符串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