添加项目文件。
This commit is contained in:
17
Sai.Toolkit.Mvvm/Converters/BoolInverterConverter.cs
Normal file
17
Sai.Toolkit.Mvvm/Converters/BoolInverterConverter.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System.Globalization;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
public class InvertBooleanConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return value is bool b ? !b : value;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return value is bool b ? !b : value;
|
||||
}
|
||||
}
|
||||
43
Sai.Toolkit.Mvvm/Converters/ComparisonConverter.cs
Normal file
43
Sai.Toolkit.Mvvm/Converters/ComparisonConverter.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using System.Globalization;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
public class ComparisonConverter : IValueConverter
|
||||
{
|
||||
/// <summary>
|
||||
/// 模型属性到控件属性
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="targetType"></param>
|
||||
/// <param name="parameter"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
//value:ViewModel属性,枚举/数字/字符串
|
||||
//parameter:ConverterParameter,枚举/数字/字符串
|
||||
//return (string)parameter == (string)value;
|
||||
//绑定的枚举属性与控件转换参数一致则选中
|
||||
return value.Equals(parameter);
|
||||
//return (string)parameter == (string)value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 控件选中,将Converter参数传给模型属性
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="targetType"></param>
|
||||
/// <param name="parameter"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
//value:bool 比如RadioButton的check属性
|
||||
//parameter:ConverterParameter枚举
|
||||
//一样才传递给ViewModel
|
||||
//选中则返回枚举类
|
||||
return value is true ? parameter : Binding.DoNothing;
|
||||
//return (bool)value ? parameter : Binding.DoNothing;
|
||||
}
|
||||
}
|
||||
65
Sai.Toolkit.Mvvm/Converters/EnumDescriptionConverter.cs
Normal file
65
Sai.Toolkit.Mvvm/Converters/EnumDescriptionConverter.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// 枚举描述转换
|
||||
/// </summary>
|
||||
public class EnumDescriptionConverter : IValueConverter
|
||||
{
|
||||
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
var myEnum = (Enum)value;
|
||||
var description = GetEnumDescription(myEnum);
|
||||
return description;
|
||||
}
|
||||
|
||||
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
private string GetEnumDescription(Enum enumObj)
|
||||
{
|
||||
var fieldInfo = enumObj.GetType().GetField(enumObj.ToString());
|
||||
var descriptionAttr = fieldInfo.GetCustomAttributes(false).OfType<DescriptionAttribute>().SingleOrDefault();
|
||||
return descriptionAttr == null ? enumObj.ToString() : descriptionAttr.Description;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 枚举类上加特性[TypeConverter(typeof(EnumDescriptionTypeConverter))]
|
||||
/// </summary>
|
||||
//TODO 待测试
|
||||
public class EnumDescriptionTypeConverter : EnumConverter
|
||||
{
|
||||
public EnumDescriptionTypeConverter(Type type) : base(type)
|
||||
{
|
||||
}
|
||||
|
||||
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
|
||||
{
|
||||
if (destinationType == typeof(string))
|
||||
{
|
||||
if (null != value)
|
||||
{
|
||||
FieldInfo fi = value.GetType().GetField(value.ToString());
|
||||
|
||||
if (null != fi)
|
||||
{
|
||||
var attributes =
|
||||
(DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
|
||||
|
||||
return ((attributes.Length > 0) && (!string.IsNullOrEmpty(attributes[0].Description)))
|
||||
? attributes[0].Description
|
||||
: value.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
return base.ConvertTo(context, culture, value, destinationType);
|
||||
}
|
||||
}
|
||||
93
Sai.Toolkit.Mvvm/Converters/EnumSourceAndConverter.cs
Normal file
93
Sai.Toolkit.Mvvm/Converters/EnumSourceAndConverter.cs
Normal file
@@ -0,0 +1,93 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Description(描述特性)的枚举转换同时也是枚举源的集合
|
||||
/// </summary>
|
||||
public class EnumItemsSourceAndConverter : Collection<string>, IValueConverter
|
||||
{
|
||||
private IDictionary<object, object> displayNameToValueMap;
|
||||
private Type type;
|
||||
|
||||
private IDictionary<object, object> valueToDisplayNameMap;
|
||||
|
||||
public Type Type
|
||||
{
|
||||
get => type;
|
||||
set
|
||||
{
|
||||
if (!value.IsEnum)
|
||||
{
|
||||
throw new ArgumentException("不是枚举类型", $"{value}");
|
||||
}
|
||||
|
||||
type = value;
|
||||
Initialize();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 类属性到控件属性,源到目标
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="targetType"></param>
|
||||
/// <param name="parameter"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
//if (value != null)
|
||||
//{
|
||||
// int n = (int)value;
|
||||
// if (n == 0 || n == -1)
|
||||
// {
|
||||
// return null;
|
||||
// }
|
||||
//}
|
||||
return value == null
|
||||
? null
|
||||
: valueToDisplayNameMap.TryGetValue(value, out var value1)
|
||||
? value1
|
||||
: null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 目标到源
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="targetType"></param>
|
||||
/// <param name="parameter"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <returns></returns>
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return value == null
|
||||
? null
|
||||
: displayNameToValueMap.TryGetValue(value, out var value1)
|
||||
? value1
|
||||
: null;
|
||||
}
|
||||
|
||||
private static object GetDescription(FieldInfo fieldInfo)
|
||||
{
|
||||
var descriptionAttribute = (DescriptionAttribute)Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute));
|
||||
return descriptionAttribute != null ? descriptionAttribute.Description : fieldInfo.Name;
|
||||
}
|
||||
|
||||
private void Initialize()
|
||||
{
|
||||
valueToDisplayNameMap = type.GetFields(BindingFlags.Static | BindingFlags.Public).ToDictionary(fi => fi.GetValue(null), GetDescription);
|
||||
displayNameToValueMap = valueToDisplayNameMap.ToDictionary(kvp => kvp.Value, kvp => kvp.Key);
|
||||
Clear();
|
||||
//当前converter的集合添加元素
|
||||
foreach (string name in displayNameToValueMap.Keys)
|
||||
{
|
||||
Add(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
17
Sai.Toolkit.Mvvm/Converters/HasSelectedItemConverter.cs
Normal file
17
Sai.Toolkit.Mvvm/Converters/HasSelectedItemConverter.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System.Globalization;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
public class HasSelectedItemConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return value == null ? false : (object)true;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
20
Sai.Toolkit.Mvvm/Converters/Null2EnableConverter.cs
Normal file
20
Sai.Toolkit.Mvvm/Converters/Null2EnableConverter.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using System.Globalization;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// 未选择或选择为空时,不可用
|
||||
/// </summary>
|
||||
public class Null2EnableConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return (int)value != -1;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
48
Sai.Toolkit.Mvvm/Converters/RenameConverter.cs
Normal file
48
Sai.Toolkit.Mvvm/Converters/RenameConverter.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
public class RenameConverter : IMultiValueConverter
|
||||
{
|
||||
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
var modifyFamilyName = values[0].ToString();
|
||||
var familyName = values[1].ToString();
|
||||
var symbolName = values[2].ToString();
|
||||
string searchText = values[3] as string;
|
||||
string mapString = string.Empty;
|
||||
if (string.IsNullOrEmpty(searchText))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (modifyFamilyName)
|
||||
{
|
||||
case "0":
|
||||
if (string.IsNullOrEmpty(familyName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
mapString = familyName;
|
||||
break;
|
||||
case "1":
|
||||
if (string.IsNullOrEmpty(symbolName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
mapString = symbolName;
|
||||
break;
|
||||
}
|
||||
|
||||
return mapString.IndexOf(searchText, StringComparison.OrdinalIgnoreCase) >= 0;
|
||||
}
|
||||
|
||||
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
22
Sai.Toolkit.Mvvm/Converters/SearchValueConverter.cs
Normal file
22
Sai.Toolkit.Mvvm/Converters/SearchValueConverter.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
public class SearchValueConverter : IMultiValueConverter
|
||||
{
|
||||
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
var cellText = values[0] == null ? string.Empty : values[0].ToString();
|
||||
var searchText = values[1] as string;
|
||||
if (!string.IsNullOrEmpty(searchText) && !string.IsNullOrEmpty(cellText))
|
||||
{
|
||||
return cellText.ToLower().Contains(searchText.ToLower());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
26
Sai.Toolkit.Mvvm/Converters/StringsIsNotNullOrEmptyCheck.cs
Normal file
26
Sai.Toolkit.Mvvm/Converters/StringsIsNotNullOrEmptyCheck.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using System.Globalization;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
public class StringsIsNotNullOrEmptyCheck : IMultiValueConverter
|
||||
{
|
||||
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
foreach (var item in values)
|
||||
{
|
||||
string s = item.ToString();
|
||||
if (string.IsNullOrWhiteSpace(s))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
17
Sai.Toolkit.Mvvm/Converters/TaskResultConverter.cs
Normal file
17
Sai.Toolkit.Mvvm/Converters/TaskResultConverter.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System.Globalization;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Sai.Toolkit.Mvvm.Converters;
|
||||
|
||||
public class TaskResultConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return value is Task<string> val && val.IsCompleted ? val.Result : (object)null;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user