我有一個後臺工作進程爲我們的系統開始配置新客戶端。這裏是DoWork的方法是什麼樣子:綁定按鈕在後臺工作進程完成後未啓用
ProvisioningManager manager = new ProvisioningManager(false)
{
};
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
{
this.MaxSteps = manager.MaxProgress;
}));
manager.StatusUpdated += new ProvisioningManager.StatusUpdatedHandler(manager_StatusUpdated);
manager.TaskCompleted += new ProvisioningManager.TaskCompleteHandler(manager_TaskCompleted);
manager.ProvisionClient();
while (!manager.Completed)
{
System.Threading.Thread.Sleep(100 * 60);
}
基本上,它會創建一個處理聊到不同的子系統,其提供的客戶經理。
現在我有一個狀態更新事件和已完成的供應管理器事件。當TaskCompleted事件觸發我希望能夠把我的顯示對象的屬性,以便在嚮導中完成按鈕啓用:
void manager_TaskCompleted(object sender, ProvisioningManager.Task taskType)
{
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
{
this.ProvisioningComplete = true;
}));
}
該按鈕的XAML看起來是這樣的:
<wizard:WizardPage Header="Provisioning Client..."
ShowBack="False"
AllowBack="False"
AllowFinish="{Binding Source={StaticResource ResourceKey=dataObject}, Path=ProvisioningComplete}"
Loaded="Provisioning_Loaded">
</wizard:WizardPage>
這不起作用。即使我確保點擊調度程序線程來設置顯示對象的屬性,但它實際上並不會將該按鈕更改爲啓用,直到我單擊該窗口。這是AvalonWizard中的錯誤還是我沒有在正確的線程上設置INotifyPropertyChanged?有沒有辦法破解這個;基本上我可以在沒有鼠標點擊的情況下以編程方式聚焦窗口
我累了配售,雖然環在DoWork的方法,這樣我可以使用的BackgroundWorker的完成方法:
void provisioningWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
{
this.ProvisioningComplete = true;
}));
}
,不能正常工作。是什麼賦予了?!
更新 這裏是顯示對象所要求的靜態資源實例:
<Window.Resources>
<ObjectDataProvider x:Key="dataObject" ObjectType="{x:Type winDO:NewClientWizardDO}" />
</Window.Resources>
更新II 這裏是屬性和屬性修改射手:
public bool ProvisioningComplete
{
get { return this._ProvisioningComplete; }
set
{
this._ProvisioningComplete = value;
this.NotifyPropertyChanged("ProvisioningComplete");
}
}
protected void NotifyPropertyChanged(params string[] propertyNames)
{
if (this.PropertyChanged != null)
{
foreach (string propertyName in propertyNames)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
你可以請你的靜態資源的聲明「StaticResource ResourceKey = dataObject」? – Murven
@Murven,請求的代碼已被添加到問題中。感謝您查看此問題。 –
我假設NewClientWizardDO實現INotifyPropertyChanged並且屬性ProvisioningComplete觸發PropertyChangedEvent。您能否確認或發佈該課程的代碼?我很抱歉,我也應該要求提供這一個,不確定這一點很難說清楚。 – Murven