diff --git a/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/GenericConverter.cs b/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/GenericConverter.cs
deleted file mode 100644
index 43ca0dc..0000000
--- a/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/GenericConverter.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Data;
-
-namespace BallanceTasEditor.Frontend.Converters {
- [ValueConversion(typeof(int), typeof(string))]
- public class FpsConverter : IValueConverter {
- public static FpsConverter Instance = new FpsConverter();
-
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
- if (value is int tv) {
- if (tv <= 0) return DependencyProperty.UnsetValue;
- else return Backend.FpsConverter.ToDelta(tv).ToString();
- } else {
- return DependencyProperty.UnsetValue;
- }
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
- return Binding.DoNothing;
- }
- }
-
- ///
- /// 将IsEnable转换为Visibility。
- ///
- [ValueConversion(typeof(bool), typeof(Visibility))]
- public class VisibilityConverter : IValueConverter {
- public static VisibilityConverter Instance = new VisibilityConverter();
-
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
- if (value is bool bv) {
- if (bv) return Visibility.Visible;
- else return Visibility.Collapsed;
- } else {
- return DependencyProperty.UnsetValue;
- }
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
- return Binding.DoNothing;
- }
- }
-
-}
diff --git a/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifiedDeltaTimeConverter.cs b/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifiedDeltaTimeConverter.cs
new file mode 100644
index 0000000..ada93bc
--- /dev/null
+++ b/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifiedDeltaTimeConverter.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Data;
+
+namespace BallanceTasEditor.Frontend.Converters {
+
+ [ValueConversion(typeof(string), typeof(string))]
+ public class StringifiedDeltaTimeConverter : IValueConverter {
+ public static readonly StringifiedDeltaTimeConverter Instance = new StringifiedDeltaTimeConverter();
+
+ public StringifiedDeltaTimeConverter() {
+ m_Validator = new Validator.FpsValidator();
+ }
+
+ private Validator.FpsValidator m_Validator;
+ private static readonly string INVALID_DELTA_TIME = "N/A";
+
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
+ var stringifiedFps = value as string;
+ if (stringifiedFps is null) {
+ return INVALID_DELTA_TIME;
+ }
+
+ return m_Validator.Validate(stringifiedFps).Match(
+ v => Backend.FpsConverter.ToDelta(v).ToString(),
+ _ => INVALID_DELTA_TIME
+ );
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
+ return Binding.DoNothing;
+ }
+ }
+}
diff --git a/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifyConverter.cs b/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifyConverter.cs
deleted file mode 100644
index 4dc9bd5..0000000
--- a/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifyConverter.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Data;
-
-namespace BallanceTasEditor.Frontend.Converters {
-
- [ValueConversion(typeof(int?), typeof(string))]
- public class StringifyIntegerConverter : IValueConverter {
- public static StringifyIntegerConverter Instance = new StringifyIntegerConverter();
-
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
- if (value is null) {
- return "";
- } else if (value is int iv) {
- return iv.ToString();
- } else {
- return DependencyProperty.UnsetValue;
- }
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
- if (value is string s) {
- if (int.TryParse(s, out int iv)) return iv;
- else return null;
- } else {
- return DependencyProperty.UnsetValue;
- }
- }
- }
-}
diff --git a/BallanceTasEditor/BallanceTasEditor/Frontend/Views/NewFileDialog.xaml b/BallanceTasEditor/BallanceTasEditor/Frontend/Views/NewFileDialog.xaml
index a83df46..00acedd 100644
--- a/BallanceTasEditor/BallanceTasEditor/Frontend/Views/NewFileDialog.xaml
+++ b/BallanceTasEditor/BallanceTasEditor/Frontend/Views/NewFileDialog.xaml
@@ -51,8 +51,8 @@
-
+ Text="{Binding Fps, Mode=OneWay, Converter={x:Static conveter:StringifiedDeltaTimeConverter.Instance}}"
+ Validation.ErrorTemplate="{x:Null}"/>