Hello,
I am trying to update a property value from a Form dialogue. This form dialogue is opened in the DoWork method ofBackgroundWorker.
I have a custom type editor to update the property in the question.
Here is my code:
class UIFocusTracingEditor : UITypeEditor { public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context) { if (context != null) { return System.Drawing.Design.UITypeEditorEditStyle.Modal; } return base.GetEditStyle(context); } public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value) { if (value is string || value == null) { BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); worker.RunWorkerAsync(context); } return base.EditValue(context, provider, value); } private void worker_DoWork(object sender, DoWorkEventArgs e) { ITypeDescriptorContext context = (ITypeDescriptorContext)e.Argument; using (var mw = new MainWindow()) { var result = mw.ShowDialog(); if (result == DialogResult.OK) { string[] items = mw.targetItemPath.Split(';'); string[] arr = mw.targetItemPath.Split(';'); Array.Reverse(arr); mw.targetItemPath = string.Join(";", arr);//Update the proeprty ((ITargetElementPath)context.Instance).TargetElementPath = mw.targetItemPath; } } } void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //CommandManager.InvalidateRequerySuggested(); //not working } void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { } } public interface ITargetElementPath { string TargetElementPath { get; set; } }
I hope you understand the code. In above code, TargetElementPath is the property which I want to update.
As suggested by someone on stackoverflow, I tried CommandManager.InvalidateRequerySuggested() to focus on the property in PropertyGrid. But it didn't work.
Could you please tell me the right solution?
Thank you in advance!