我不知道如何問這個問題,但是在這裏。我有一個WPF窗口,它有一個響應TextBox的TextChanged事件的委託。當我將數據加載到窗口中,然後訂閱我的控制器類到該事件時,委託處理程序方法被調用。爲什麼委託訂閱者在事件通過後被調用?
順序是這樣的。 1.創建窗口 2.加載該窗口的數據。 3.使用TextDidChange方法訂閱窗口的TextChanged事件。
在這種情況下,即使在步驟2中發生「事件」,我的TextDidChange方法也會被調用。是否會出現這種預期行爲?如果不是,會發生什麼?編號: 下面是相關的代碼。我沒有發佈UserControl的事件處理,因爲它是樣板(如果委託!= null,則調用委託)。
從控制器構造:
public ServiceRequestVM(Boolean isDataSourceProd, codExistServiceRequestSearchType requestIdOrMapNo, String aMapNumber, Decimal aRequestId) {
//create the schema and load any necessary data
_sroc = new ServiceRequestOracleController();
_sroc.IsProd = isDataSourceProd;
_isProd = isDataSourceProd;
_isNewRequest = false;
_searchType = requestIdOrMapNo;
createSchema();
if (requestIdOrMapNo == codExistServiceRequestSearchType.MapNumber) {
loadMatchingRequest(aMapNumber);
} else {
loadMatchingRequest(aRequestId);
}
Decimal _reqId = (Decimal)_serviceRequestTable.Rows[0]["REQUESTID"];
loadNotesForRequest(_reqId);
loadTagsForRequest(_reqId);
Decimal _custId = (Decimal)_serviceRequestTable.Rows[0]["CUSTOMERID"];
getNameForCustomerAndSetCustomerIdForRequest(_custId);
//configure the UI
configureUI();
customerListBoxVisibility = Visibility.Hidden;
tagListBoxVisibility = Visibility.Hidden;
//create the view (a UserControl)
_serviceRequestView = new ServiceRequestView();
_serviceRequestView.DataContext = this;
//load customers and tags
loadCustomers();
loadTags();
_shouldListBoxesBeSeen = false;
//subscribe to delegates
subscribeToRequestDelegates();
}
的subscribeToRequestDelegates方法
private void subscribeToRequestDelegates() {
_serviceRequestView.addNoteButtonWasClicked += new ServiceRequestView.AddNoteButtonWasClickedHandler(addNote);
_serviceRequestView.addTagButtonWasClicked += new ServiceRequestView.AddTagButtonWasClickedHandler(addTag);
_serviceRequestView.locateButtonWasClicked += new ServiceRequestView.LocateButtonWasClickedHandler(locateMap);
_serviceRequestView.openButtonWasClicked += new ServiceRequestView.OpenButtonWasClickedHandler(openMap);
_serviceRequestView.saveButtonWasClicked += new ServiceRequestView.SaveButtonWasClickedHandler(saveRequest);
_serviceRequestView.noteWasDoubleClicked += new ServiceRequestView.NoteWasDoubleClickedHandler(openSelectedNote);
_serviceRequestView.dateCompletedLostFocus += new ServiceRequestView.DateCompletedLostFocusHandler(dateCompletedDidChange);
_serviceRequestView.titleLostFocus += new ServiceRequestView.TitleLostFocusHandler(titleDidChange);
_serviceRequestView.customerTextChanged += new ServiceRequestView.CustomerTextChangedHandler(customerTextDidChange);
_serviceRequestView.selectedCustomerChanged += new ServiceRequestView.SelectedCustomerChangedHandler(selectedCustomerDidChange);
_serviceRequestView.tagTextChanged += new ServiceRequestView.TagTextChangedHandler(tagTextDidChange);
_serviceRequestView.selectedTagChanged += new ServiceRequestView.SelectedTagChangedHandler(selectedTagDidChange);
_serviceRequestView.tagTextLostFocus += new ServiceRequestView.TagTextLostFocusHandler(tagTextLostFocus);
_serviceRequestView.customerTextLostFocus += new ServiceRequestView.CustomerTextLostFocusHandler(customerTextLostFocus);
_serviceRequestTable.ColumnChanged += new DataColumnChangeEventHandler(serviceRequestTableColumnValueDidChange);
}
這是一個奇怪的行爲。你能提供你的代碼嗎? – IVerzin 2011-04-27 07:36:39