Dreamine.UI.Wpf 1.0.1
Dreamine.UI.Wpf 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
NumberComparisonConverter.cs
이 파일의 문서화 페이지로 가기
1
2using System.Globalization;
3using System.Windows.Data;
4
6
15public class NumberComparisonConverter : IValueConverter
16{
65 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
66 {
67 if (value == null || parameter == null)
68 return false;
69
70 if (!double.TryParse(value.ToString(), CultureInfo.InvariantCulture, out double number))
71 return false;
72
73 string expr = parameter.ToString()!.Trim();
74
75 var orParts = expr.Split(["||"], StringSplitOptions.RemoveEmptyEntries);
76
77 foreach (var orPart in orParts)
78 {
79 var andParts = orPart.Split(["&&"], StringSplitOptions.RemoveEmptyEntries);
80
81 bool andResult = true;
82 foreach (var cond in andParts)
83 {
84 if (!EvaluateCondition(number, cond.Trim()))
85 {
86 andResult = false;
87 break;
88 }
89 }
90
91 if (andResult)
92 return true;
93 }
94
95 return false;
96 }
97
130 private bool EvaluateCondition(double number, string condition)
131 {
132 var tokens = condition.Split(' ', StringSplitOptions.RemoveEmptyEntries);
133 if (tokens.Length != 2)
134 return false;
135
136 string op = tokens[0];
137 if (!double.TryParse(tokens[1], CultureInfo.InvariantCulture, out double threshold))
138 return false;
139
140 return op switch
141 {
142 ">" => number > threshold,
143 ">=" => number >= threshold,
144 "<" => number < threshold,
145 "<=" => number <= threshold,
146 "==" => Math.Abs(number - threshold) < double.Epsilon,
147 "!=" => Math.Abs(number - threshold) > double.Epsilon,
148 _ => false
149 };
150 }
151
200 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
201 {
202 return Binding.DoNothing;
203 }
204}
object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
object Convert(object value, Type targetType, object parameter, CultureInfo culture)