【发布时间】:2011-04-26 21:03:59
【问题描述】:
我不知道怎么问这个问题,但是就这样吧。我有一个 WPF 窗口,它有一个响应 TextBox 的 TextChanged 事件的委托。当我将数据加载到窗口中,然后为我的控制器类订阅该事件时,委托处理程序方法被调用。
顺序是这样的。 1.创建窗口 2. 加载该窗口的数据。 3. 使用 TextDidChange 方法订阅窗口的 TextChanged 事件。
在这种情况下,我的 TextDidChange 方法被调用,即使“事件”发生在步骤 2 中。这是预期的行为吗?如果没有,会发生什么?
编辑: 这是相关的代码。我没有发布来自 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);
}
【问题讨论】:
-
这是一种奇怪的行为。你能提供你的代码吗?