Files
XplorePlane/XP.Common/GeneralForm/ViewModels/InputDialogViewModel.cs
T

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;
}
}
}