我有一個貨幣轉換器類將輸入輸入轉換為貨幣。但是,我也想允許負值。
<Entry Text="{Binding Price, Converter={StaticResource currencyConverter}}" Keyboard="Numeric" Placeholder="$0.00""/>
public class CurrencyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Decimal.Parse(value.ToString()).ToString("C");
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string valueFromString = Regex.Replace(value.ToString(), @"\D", "");
if (valueFromString.Length <= 0)
return 0m;
long valueLong;
if (!long.TryParse(valueFromString, out valueLong))
return 0m;
if (valueLong <= 0)
return 0m;
return valueLong / 100m;
}
}
uj5u.com熱心網友回復:
然后,您應該使用正則運算式更改方法。
不要替換所有非數字字符,而是嘗試使用可能的前導破折號來捕獲數字。
正則運算式是: ^-?\d $

您可以在此處查看此正則運算式的作業原理
并且它的使用有點不同。
string valueFromString = Regex.Match("", @"^-?\d $").Value;
最后一個想法:您應該洗掉最后一個條件,因為如果輸入值小于零,則將回傳零。
if (valueLong <= 0)
return 0m;
我不知道您的應用程式中的其余邏輯,但這些將是第一步。
uj5u.com熱心網友回復:
根據您描述的要求,您只想將輸入數字轉換為 Decimal 型別。
在方法中只需要判斷輸入的數字是否為負數,如果是負數,只需要替換字串即可。
為了讓代碼更簡單,可以使用
CompletedEntry的方法,在內部進行判斷。
我寫了一個小例子供你參考:
這是背景代碼(檢查添加注釋的位置):
private void Entry_Completed(object sender, EventArgs e)
{
int myenry = int.Parse((sender as Entry).Text.ToString());
string returnEntry = Decimal.Parse(mytest.Text.ToString()).ToString("C");
if (myenry < 0) //Judge here and perform string replacement
{
returnEntry = returnEntry.Insert(2,"-");
}
mytest1.Text = returnEntry;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/406454.html
標籤:
