mvvmlight
mvvmlight copied to clipboard
View not updated when setting properties from within RelayCommand execution
This is the first time I am using MvvmLight, so I hope I am not overlooking something obvious.
In my WPF ViewModel I have something like:
private ICommand readFileCommand;
public ICommand ReadFileCommand => readFileCommand ?? (readFileCommand = new RelayCommand(ReadFile));
private void ReadFile()
{
FileMessage = "Message.";
}
private string fileMessage;
public string FileMessage
{
get { return fileMessage; }
set
{
//Set(ref fileMessage, value);
fileMessage = value;
RaisePropertyChanged();
}
}
I have a couple of problems with it.
- Main problem is that setting a property like FileMessage from within a method like ReadFile() does not result in an update of the view until ReadFile is completed.
- There is a difference between using RaisePropertyChanged() which succeeds at that moment, and using Set() which does nothing at all. Though the latter did work outside such a method.
- The problem extends to other elements like a DataGrid on a DataView.
In wondered if the called methods should be asynchronous, but that does not seem logical. I have not tried that yet as that does not really fit into what I want to achieve.
So what is happening? Am I overlooking something? Is this a limitation of the framework? Or is this a bug?
Thanks!
Unfortunately this project seems abandoned.
I have posted the problem on Stackoverflow. See the status THERE.
If someone has any addition here, that would still be appreciated.
May not be the issue but a couple of observations. Set will only call RaisePropertyChanged if the property value changes (check the bool response). If you want it raised every time use RaisePropertyChanged. The event may not be being raised until after the read file action if you are not yielding a thread. You would need to ensure your operation is not conducted on the UI thread to free that thread to update the UI. The read operation should be async or background worker or similar.