Skip to content

[Question] Initial List Validation / Getting IsValid #450

Description

@mysteryx93

I'm trying to do something very simple. I want to validate that the Sources ObservableCollection is not empty.

var sourceNotEmpty = Sources
    .ToObservableChangeSet(x => x.Path)
    .ToCollection()
    .Select(x => x.Any());
this.ValidationRule(x => x.Sources,
    sourceNotEmpty,
    "You must select source files or folders to encode");

Testing GetErrors works except for this test. It fails because the ValidationRule hasn't yet been evaluated. If I add an item and then remove it, then it works.

[Fact]
public void GetErrors_SourceEmpty_Error()
{
    var errors = Model.GetErrors(nameof(Model.Sources));

    Assert.Single(errors);  // errors is empty
}

Then, how do I get IsValid? Before doing some work in the ViewModel, I first need to check "IsValid" but haven't yet found the way to get the current value. LastAsync won't work if it hasn't yet been evaluated.

[Fact]
public void IsValid_MissingData_ReturnsFalse()
{
    bool? result = null;

    Model.IsValid().Do(x => result = x);
    
    Assert.False(result);
}

These 2 things are extremely simple but there's probably something I'm missing with the whole paradigm?

Adding to this, on the UI, I probably don't want to display all the "field missing" errors right away, but only when he tries to click Submit or re-empties a field after typing in it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions