从任务中的对象设置属性值
本文关键字:设置 属性 对象 任务 | 更新日期: 2023-09-27 18:31:51
我有一个名为 Settings 的对象。它有一个名为 BusyDoingAction 的属性,类型为 bool
public class Settings : ObservableObject
{
private bool busyDoingAction;
public bool BusyDoingAction
{
get { return this.busyDoingAction; }
set
{
this.busyDoingAction= value;
OnPropertyChanged(() => BusyDoingAction);
}
}
我还有另一个类叫 FileAdding,
private readonly string[] files;
private bool busy;
public FileAdding(string[] files, bool busyAction)
{
this.files = files;
this.busy= busyAction;
}
现在,在我的视图模型中,我有以下内容:
var fileAdding = new FileAdding(files, Settings.BusyDoingAction);
if (!fileAdding.Initialize())
return;
Task<bool>.Factory.StartNew(() =>
{
fileAdding.Execute(CToken);
return fileAdding.Deinitialize();
}, CToken);
}
在文件添加初始化()函数中,我有:
public bool Initialize()
{
busy = true;
return true;
}
public bool Deinitialize()
{
busy = false;
return true;
}
问题是:忙碌操作在文件添加中没有更改,并且我没有收到该属性的任何值更改通知..
该属性绑定到我的应用程序中的主网格,我使用它来检测应用程序是否繁忙并根据 BusyDoing Action 的值启用/禁用网格
我不知道我做错了什么,但我需要在那个 busyDoingAction.Intialize/Deinitialize 函数中设置 BusyDoingAction 的属性值。
任何帮助真的很感激..
你FileAdding
类应该喜欢这个..你应该有Settings
属性...并在 UI 上绑定到Settings.BusyDoingAction
。
private readonly string[] files;
private Settings setting;
public FileAdding(string[] files, Settings setting)
{
this.files = files;
this.setting= setting;
}
public Settings Settings
{
get { return this.setting; }
set
{
this.setting= value;
OnPropertyChanged(() => Settings);
}
}
public bool Initialize()
{
Settings.BusyDoingAction = true;
return true;
}
public bool Deinitialize()
{
Settings.BusyDoingAction = false;
return true;
}
正在执行:
var fileAdding = new FileAdding(files, Settings.BusyDoingAction);
您只需将当前值或Settings.BusyDoingAction
复制到 FileAction.busy
.
Settings.BusyDoingAction
和FileAdding.busy
之间没有联系
为了解决您的问题,一种方法是将Settings
引用传递给FileAdding
:
private readonly string[] files;
private readonly Settings settings;
public FileAdding(string[] files, Settings settings)
{
this.files = files;
this.settings = settings;
}
然后在:
public bool Initialize()
{
this.settings.BusyDoingAction = true;
return true;
}
public bool Deinitialize()
{
this.settings.BusyDoingAction = false;
return true;
}