Beispiel #1
0
    void HandleDirectoryAutoCompleteBoxPopulating(object sender, PopulatingEventArgs e)
    {
        var    autoCompleteBox = (AutoCompleteBox)sender;
        string text            = autoCompleteBox.Text;

        string[] subDirectories = Array.Empty <string>();

        if (!string.IsNullOrWhiteSpace(text))
        {
            string?directoryName = Path.GetDirectoryName(text);
            if (DirectoryUtil.ExistsOrNullIfTimeout(directoryName ?? text, TimeSpan.FromSeconds(2)) ?? false)
            {
                try
                {
                    subDirectories = Directory.GetDirectories(
                        directoryName ?? text,
                        "*",
                        SearchOption.TopDirectoryOnly);
                }
                catch
                {
                    // ignore
                }
            }
        }

        autoCompleteBox.ItemsSource = subDirectories;
        autoCompleteBox.PopulateComplete();
    }
Beispiel #2
0
    protected override ValidationResult?IsValid(object?value, ValidationContext validationContext)
    {
        if (string.IsNullOrWhiteSpace(value?.ToString()))
        {
            return(ValidationResult.Success);
        }

        if (value is not string path)
        {
            return(new ValidationResult("Invalid value type."));
        }

        try
        {
            var result = DirectoryUtil.ExistsOrNullIfTimeout(path, TimeSpan.FromSeconds(2));

            if (result == null)
            {
                return(new ValidationResult("Timed out accessing directory."));
            }

            return(result.Value ? ValidationResult.Success : new ValidationResult("Directory doesn't exist."));
        }
        catch (Exception ex)
        {
            if (ex is AggregateException aggregate)
            {
                ex = aggregate.InnerException ?? ex;
            }

            return(new ValidationResult("Cannot access directory: " + ex.Message));
        }
    }