diff --git a/BOB/App.xaml b/BOB/App.xaml
index 21d7209..5a6c6e5 100644
--- a/BOB/App.xaml
+++ b/BOB/App.xaml
@@ -25,6 +25,66 @@
+
+
diff --git a/BOB/App.xaml.cs b/BOB/App.xaml.cs
index 6c7466b..a132772 100644
--- a/BOB/App.xaml.cs
+++ b/BOB/App.xaml.cs
@@ -34,11 +34,12 @@ namespace BOB
containerRegistry.RegisterForNavigation("MainView");
//注册弹窗
containerRegistry.RegisterDialog("MessageBox");
+ containerRegistry.RegisterDialog("ParameterSetting");
+ containerRegistry.RegisterDialog("DeviceSetting");
//注册全局变量
containerRegistry.RegisterSingleton();
}
-
}
diff --git a/Common/Converters/BooleanToVisibilityConverter.cs b/BOB/Converters/BooleanToVisibilityConverter.cs
similarity index 50%
rename from Common/Converters/BooleanToVisibilityConverter.cs
rename to BOB/Converters/BooleanToVisibilityConverter.cs
index 5790936..1dd2e23 100644
--- a/Common/Converters/BooleanToVisibilityConverter.cs
+++ b/BOB/Converters/BooleanToVisibilityConverter.cs
@@ -7,30 +7,27 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
-namespace Common.Converters
+namespace BOB.Converters
{
public class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
- bool input = value is bool b && b;
- bool invert = parameter?.ToString()?.ToLower() == "invert";
-
- if (invert)
- input = !input;
-
- return input ? Visibility.Visible : Visibility.Collapsed;
+ if (value is bool boolValue)
+ {
+ // 处理反转逻辑
+ if (parameter?.ToString() == "Inverse")
+ {
+ boolValue = !boolValue;
+ }
+ return boolValue ? Visibility.Visible : Visibility.Collapsed;
+ }
+ return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
- bool output = value is Visibility v && v == Visibility.Visible;
- bool invert = parameter?.ToString()?.ToLower() == "invert";
-
- if (invert)
- output = !output;
-
- return output;
+ throw new NotImplementedException();
}
}
}
diff --git a/BOB/Converters/DeviceNameConverter.cs b/BOB/Converters/DeviceNameConverter.cs
new file mode 100644
index 0000000..c01ff01
--- /dev/null
+++ b/BOB/Converters/DeviceNameConverter.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Data;
+
+namespace BOB.Converters
+{
+ public class DeviceNameConverter : IValueConverter
+ {
+ private readonly string[] specialName = { "奇偶" };
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is string name)
+ {
+ if (specialName.Contains(name))
+ {
+ if (parameter?.ToString() == "Inverse")
+ {
+ return Visibility.Visible;
+ }
+ else if (parameter?.ToString() == "Items")
+ {
+ switch (name)
+ {
+ case "奇偶":
+ return new List { "无", "奇", "偶" };
+ }
+ }
+ return Visibility.Collapsed;
+ }
+ }
+ if (parameter?.ToString() == "Inverse")
+ {
+ return Visibility.Collapsed;
+ }
+ return Visibility.Visible;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/BOB/Converters/EnumValueConverter.cs b/BOB/Converters/EnumValueConverter.cs
new file mode 100644
index 0000000..f343478
--- /dev/null
+++ b/BOB/Converters/EnumValueConverter.cs
@@ -0,0 +1,82 @@
+using System;
+using System.Globalization;
+using System.Linq;
+using System.Windows.Data;
+
+namespace BOB.Converters
+{
+ public class EnumValueConverter : IMultiValueConverter
+ {
+ public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
+ {
+ // 验证输入参数
+ if (values.Length < 2 || values[0] == null || values[1] == null)
+ {
+ return null;
+ }
+
+ try
+ {
+ // 获取枚举类型
+ Type enumType = values[0] as Type;
+ if (enumType == null || !enumType.IsEnum)
+ {
+ return null;
+ }
+
+ // 获取数值
+ object value = values[1];
+
+ // 确保数值类型匹配枚举的底层类型
+ Type underlyingType = Enum.GetUnderlyingType(enumType);
+ object convertedValue;
+
+ try
+ {
+ convertedValue = System.Convert.ChangeType(value, underlyingType);
+ }
+ catch
+ {
+ // 如果转换失败,尝试直接使用原始值
+ convertedValue = value;
+ }
+
+ // 将数值转换为枚举值
+ return Enum.ToObject(enumType, convertedValue);
+ }
+ catch
+ {
+ // 发生任何异常时返回null
+ return null;
+ }
+ }
+
+ public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
+ {
+ if (value == null)
+ {
+ return [null, null];
+ }
+
+ try
+ {
+ // 获取枚举值的底层数值
+ Type enumType = value.GetType();
+ if (!enumType.IsEnum)
+ {
+ return [null, null];
+ }
+
+ Type underlyingType = Enum.GetUnderlyingType(enumType);
+ object numericValue = System.Convert.ChangeType(value, underlyingType);
+
+ // 返回枚举类型和对应的数值
+ return [enumType, numericValue];
+ }
+ catch
+ {
+ return [null, null];
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BOB/Converters/EnumValuesConverter.cs b/BOB/Converters/EnumValuesConverter.cs
new file mode 100644
index 0000000..a61c605
--- /dev/null
+++ b/BOB/Converters/EnumValuesConverter.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Globalization;
+using System.Windows.Data;
+
+namespace BOB.Converters
+{
+ public class EnumValuesConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is Type type && type.IsEnum)
+ {
+ return Enum.GetValues(type);
+ }
+ return null;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/BOB/Converters/FilteredParametersConverter.cs b/BOB/Converters/FilteredParametersConverter.cs
new file mode 100644
index 0000000..b2a1de7
--- /dev/null
+++ b/BOB/Converters/FilteredParametersConverter.cs
@@ -0,0 +1,74 @@
+
+using BOB.Models;
+using System;
+using System.Globalization;
+using System.Linq;
+using System.Windows.Data;
+
+namespace BOB.Converters
+{
+ public class FilteredParametersConverter : IMultiValueConverter
+ {
+ public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (values.Length < 2 || values[0] == null || values[1] == null)
+ return null;
+
+ Type currentParamType = values[0] as Type;
+ var allParameters = values[1] as System.Collections.IEnumerable;
+
+ if (currentParamType == null || allParameters == null)
+ return allParameters;
+
+ // 过滤出类型匹配的参数
+ return allParameters.Cast()
+ .Where(p => IsTypeMatch(currentParamType, p.Type))
+ .ToList();
+ }
+
+ private bool IsTypeMatch(Type currentType, Type candidateType)
+ {
+ if (candidateType == null) return false;
+
+ // 如果候选参数类型是 object,则匹配所有类型
+ if (candidateType == typeof(object)) return true;
+
+ // 如果类型完全相同,则匹配
+ if (candidateType == currentType) return true;
+
+ // 处理数值类型的兼容性
+ if (IsNumericType(currentType) && IsNumericType(candidateType))
+ return true;
+
+ return false;
+ }
+
+ private bool IsNumericType(Type type)
+ {
+ if (type == null) return false;
+
+ switch (Type.GetTypeCode(type))
+ {
+ case TypeCode.Byte:
+ case TypeCode.SByte:
+ case TypeCode.UInt16:
+ case TypeCode.UInt32:
+ case TypeCode.UInt64:
+ case TypeCode.Int16:
+ case TypeCode.Int32:
+ case TypeCode.Int64:
+ case TypeCode.Decimal:
+ case TypeCode.Double:
+ case TypeCode.Single:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/BOB/Converters/IsEnumTypeConverter .cs b/BOB/Converters/IsEnumTypeConverter .cs
new file mode 100644
index 0000000..d2de271
--- /dev/null
+++ b/BOB/Converters/IsEnumTypeConverter .cs
@@ -0,0 +1,36 @@
+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 BOB.Converters
+{
+ public class IsEnumTypeConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is Type type)
+ {
+ // 检查是否为枚举类型
+ bool isEnum = type.IsEnum;
+
+ // 根据参数决定返回值类型
+ if (parameter is string strParam && strParam == "Collapse")
+ {
+ return isEnum ? Visibility.Collapsed : Visibility.Visible;
+ }
+ return isEnum ? Visibility.Visible : Visibility.Collapsed;
+ }
+ return Visibility.Collapsed;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/BOB/Converters/ParameterCategoryToStringConverter.cs b/BOB/Converters/ParameterCategoryToStringConverter.cs
new file mode 100644
index 0000000..9bff572
--- /dev/null
+++ b/BOB/Converters/ParameterCategoryToStringConverter.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+using static BOB.Models.ParameterModel;
+
+
+namespace BOB.Converters
+{
+ public class ParameterCategoryToStringConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+
+ if (value is ParameterCategory category)
+ {
+ switch (category)
+ {
+ case ParameterCategory.Input:
+ return "输入";
+ case ParameterCategory.Output:
+ return "输出";
+ case ParameterCategory.Temp:
+ return "缓存";
+ default:
+ return "未知";
+ }
+ }
+ return "未知";
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/BOB/Converters/ParameterCategoryToVisibilityConverter.cs b/BOB/Converters/ParameterCategoryToVisibilityConverter.cs
new file mode 100644
index 0000000..162a53b
--- /dev/null
+++ b/BOB/Converters/ParameterCategoryToVisibilityConverter.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;
+using static BOB.Models.ParameterModel;
+
+namespace BOB.Converters
+{
+ public class ParameterCategoryToVisibilityConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is ParameterCategory category)
+ {
+ if (parameter?.ToString() == "Item")
+ {
+ if (category == ParameterCategory.Temp) { return Visibility.Collapsed; }
+ else { return Visibility.Visible; }
+ }
+ bool boolValue = category == ParameterCategory.Input;
+ if (parameter?.ToString() == "Inverse")
+ {
+ boolValue = !boolValue;
+ }
+ return boolValue ? Visibility.Visible : Visibility.Collapsed;
+ }
+ return Visibility.Collapsed;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/BOB/Converters/ParameterTypeToBoolConverter.cs b/BOB/Converters/ParameterTypeToBoolConverter.cs
new file mode 100644
index 0000000..12addda
--- /dev/null
+++ b/BOB/Converters/ParameterTypeToBoolConverter.cs
@@ -0,0 +1,31 @@
+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 BOB.Converters
+{
+ public class ParameterTypeToBoolConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if(value is Type type)
+ {
+ if(type == typeof(CancellationToken))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/BOB/Converters/ParameterValueToStringConverter.cs b/BOB/Converters/ParameterValueToStringConverter.cs
new file mode 100644
index 0000000..40bf6e6
--- /dev/null
+++ b/BOB/Converters/ParameterValueToStringConverter.cs
@@ -0,0 +1,38 @@
+using ControlzEx.Standard;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace BOB.Converters
+{
+ public class ParameterValueToStringConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is IEnumerable enumerable && !(value is string))
+ {
+ var elements = enumerable.Cast