Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Async with WPF properties

I have a bound property like this:

public string MyPath
{
    get { return _mypath; }
    set
    {
        _mypath = value;
        NotifyPropertyChanged(() => MyPath);
        LoadSomeStuffFromMyPath(mypath)
    }
}

I'd like the make LoadSomeStuffFromMyPath async but I cannot await from a property. Is there a simple way to do this?

EDIT: More than one person has said not to use a property so I want to call this out. I am using WPF and this property is bound to the UI. I have to use a property.

like image 446
ConditionRacer Avatar asked Oct 23 '13 19:10

ConditionRacer


1 Answers

Since you want to force the operation to not continue until this is complete, I would suggest making a method to handle loading and displaying your progress.

You could use a separate property to disable the UI while this loads, which could effectively "block" your user until the operation completes:

public string MyPath
{
    get { return _mypath; }
    set
    {
        _myPath = value;
        NotifyPropertyChanged(() => MyPath);
        UpdateMyPathAsync();
    }
}

public async Task UpdateMyPathAsync()
{
    this.EnableUI = false; // Stop user from setting path again....
    await LoadSomeStuffFromMyPathAsync(MyPath); 
    this.EnableUI = true;
}

This allows you to still bind, as normal, with WPF, but have your UI reflect that the operation is running (asynchronously) and display progress, etc.

like image 129
Reed Copsey Avatar answered Nov 03 '22 02:11

Reed Copsey