0
votes

I've seen question ReactiveUI: Using CanExecute with a ReactiveCommand, however my issue is that I have a string property, UniqueID, and I want it to only execute when it has a length equal to 7. I cannot seem to come up with an observer that doesn't crash the program. What is the correct simple way to do this?

public class MainViewModel : ReactiveValidatedObject
{
    public MainViewModel()
    {
        RetrieveRecord = new ReactiveAsyncCommand(/* what goes here for CanExecute */);
        RetrieveRecord.Subscriber(x => Record = new Record(UniqueId));

        // or do we use the method RetrieveRecord.CanExecute()?
        // the next line crashes the app

        RetrieveRecord.CanExecute(UniqueId.Length == 7);
    }

    public ReactiveAsyncCommand RetrieveRecord { get; private set; }

    string _uniqueId;
    public string UniqueId
    {
        get { return _uniqueId; }
        set
        {
            _clientId = value;
            this.RaisePropertyChanged(x => x.UniqueId);
        }
    }
}
1

1 Answers

1
votes

How about:

RetrieveRecord = new ReactiveAsyncCommand(
    this.WhenAny(x => x.UniqueId, x => x.Value.Length == 7));