110 lines
3.4 KiB
C#
110 lines
3.4 KiB
C#
using System;
|
|
using Prism.Mvvm;
|
|
using XP.Common.Localization;
|
|
|
|
namespace XP.Common.GeneralForm.ViewModels
|
|
{
|
|
/// <summary>
|
|
/// 输入对话框 ViewModel | Input dialog ViewModel
|
|
/// </summary>
|
|
public class InputDialogViewModel : BindableBase
|
|
{
|
|
private readonly Func<string, string?>? _validate;
|
|
private string _inputText;
|
|
private string? _validationError;
|
|
|
|
/// <summary>
|
|
/// 窗口标题 | Window title
|
|
/// </summary>
|
|
public string Title { get; }
|
|
|
|
/// <summary>
|
|
/// 提示文本 | Prompt text
|
|
/// </summary>
|
|
public string Prompt { get; }
|
|
|
|
/// <summary>
|
|
/// 确定按钮文本(多语言)| OK button text (localized)
|
|
/// </summary>
|
|
public string OkText { get; }
|
|
|
|
/// <summary>
|
|
/// 取消按钮文本(多语言)| Cancel button text (localized)
|
|
/// </summary>
|
|
public string CancelText { get; }
|
|
|
|
/// <summary>
|
|
/// 用户输入的文本 | User input text
|
|
/// </summary>
|
|
public string InputText
|
|
{
|
|
get => _inputText;
|
|
set
|
|
{
|
|
if (SetProperty(ref _inputText, value))
|
|
{
|
|
// 输入变化时清除验证错误 | Clear validation error on input change
|
|
ValidationError = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 验证错误信息,null 表示无错误 | Validation error message, null means no error
|
|
/// </summary>
|
|
public string? ValidationError
|
|
{
|
|
get => _validationError;
|
|
set
|
|
{
|
|
if (SetProperty(ref _validationError, value))
|
|
{
|
|
RaisePropertyChanged(nameof(HasValidationError));
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 是否存在验证错误 | Whether there is a validation error
|
|
/// </summary>
|
|
public bool HasValidationError => !string.IsNullOrEmpty(ValidationError);
|
|
|
|
/// <summary>
|
|
/// 构造函数 | Constructor
|
|
/// </summary>
|
|
/// <param name="prompt">提示文本 | Prompt text</param>
|
|
/// <param name="title">窗口标题 | Window title</param>
|
|
/// <param name="defaultValue">默认值 | Default value</param>
|
|
/// <param name="validate">验证委托,返回 null 表示通过,返回错误信息则显示 | Validation delegate</param>
|
|
public InputDialogViewModel(
|
|
string prompt,
|
|
string title,
|
|
string defaultValue = "",
|
|
Func<string, string?>? validate = null)
|
|
{
|
|
Prompt = prompt;
|
|
Title = title;
|
|
_inputText = defaultValue;
|
|
_validate = validate;
|
|
|
|
// 按钮文本使用多语言 | Button text uses localization
|
|
OkText = LocalizationHelper.Get("Button_OK");
|
|
CancelText = LocalizationHelper.Get("Button_Cancel");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 执行验证,返回是否通过 | Run validation, returns whether it passed
|
|
/// </summary>
|
|
/// <returns>true 表示验证通过 | true means validation passed</returns>
|
|
public bool Validate()
|
|
{
|
|
if (_validate == null)
|
|
return true;
|
|
|
|
var error = _validate(InputText);
|
|
ValidationError = error;
|
|
return error == null;
|
|
}
|
|
}
|
|
}
|