TextBox上的StringFormat阻止输入

时间:2018-06-20 08:13:40

标签: c# wpf mvvm data-binding decimal

我需要在文本框中显示和设置汇率。 我的ViewModel包含一个名为decimal的{​​{1}}属性。默认情况下,最多只能输入两位小数。

汇率通常包含多于两个小数位,因此我尝试使用StringFormat实现这一点:

ExchangeRate

它显示的很好,但是我无法使用此格式设置选项输入值。

如何输入多出的两位小数?

ViewModel:

        <TextBox HorizontalAlignment="Left"
             IsEnabled="{Binding ExchangeRateNeeded}"
             Text="{Binding ExchangeRate, UpdateSourceTrigger=PropertyChanged, Delay=250, Mode=TwoWay, StringFormat={}{0:0.00000}}"
             Height="23" Margin="130,92,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="80" MaxLength="4"/>

ViewModelBase:

 public class SetupWindowViewModel : ViewModelBase
{
    public ObservableCollection<SapVkorg> SapVkOrgs { get; }

    public SapVkorg SelectedVkOrg { get; set; }
    public ICommand OkCommand { get;  }
    public int Year { get; set; }
    public bool ApertumNumbers { get; set; }
    public ObservableCollection<Currency> Currencies { get; }
    public Currency SelectedCurrency { get; set; }
    public decimal ExchangeRate { get; set; }
    public bool ExchangeRateNeeded { get { return SelectedCurrency != Currency.EUR; }  }

    public SetupWindowViewModel(Window window) : base(window)
    {
        OkCommand = new RelayCommand(Save, CanSave);

        SapVkOrgs = mainController.GetSapVkorgs();
        Currencies = mainController.GetCurrencies();

        SelectedVkOrg = SettingsHolder.SapVkorg;
        Year = SettingsHolder.Year;
        ApertumNumbers = SettingsHolder.ApertumNumbers;
        ExchangeRate = SettingsHolder.ExchangeRate;
        SelectedCurrency = SettingsHolder.Currency;
    }


    public void Save()
    {
        SettingsHolder.SapVkorg = SelectedVkOrg;
        SettingsHolder.Year = Year;
        SettingsHolder.Currency = SelectedCurrency;
        SettingsHolder.ExchangeRate = ExchangeRate;
        SettingsHolder.ApertumNumbers = ApertumNumbers;

        CloseWindow();
    }

    public bool CanSave()
    {
        return Year > 0 &&
            SelectedVkOrg != null &&
            ((ExchangeRateNeeded && ExchangeRate != 1) || (!ExchangeRateNeeded));
    }
}

0 个答案:

没有答案