簡體   English   中英

這將在WPF控件中首先觸發Binding觸發器或Event

[英]Which will fire first Binding trigger or Event in WPF control

我被迫使用第三方控件來掩蓋文本輸入。 第三方控件的XAML如下所示
<thirdParty:MaskInput Value={Binding Path=Phone, UpdateSourceTrigger=LostFocus} x:Name=Phone LostFocus=Phone_LostFocus />

現在在我的代碼后面,我有一個這樣的事件處理程序代碼-
public void Phone_LostFocus(object sender, RoutedEventArgs e) { ((MaskInput)sender).Value = ((MaskInput)e.OriginalSource).Text; }

當我執行此代碼時,有時設置了Value屬性,而有時未將其設置為文本。

我懷疑綁定的UpdateSourceTrigger。 我應該將其更改為其他內容嗎? 在這種情況下,UpdateSourceTrigger和事件本身之間的順序是什么? 該順序是可預測的,即是否總是以該順序發生?

我假設在調用LostFocus事件時需要更改嗎?

您可以在此處執行一些操作,因為據我所知,在LostFocus的UpdateSourceTrigger和LostFocus事件之間的順序是不可預測的。

1.在其他時間更新源觸發器。 如果在屬性更改時執行此操作,則在調用LostFocus事件時,模型將已經更新。 缺點是,如果每次更新模型時都在后台進行大量處理,則該過程將運行緩慢。

<thirdParty:MaskInput Value={Binding Path=Phone, UpdateSourceTrigger=PropertyChanged} LostFocus=Phone_LostFocus/>

2.在LostFocus事件中傳播對模型的更改,並將綁定保留為OneWay(從模型到控件)。

<thirdParty:MaskInput Value={Binding Path=Phone, Mode=OneWay}, LostFocus=Phone_LostFocus/>

public void Phone_LostFocus(object sender, RoutedEventArgs e) { 
    myPhone.Value = ((MaskInput)sender).Text;
    //rest of event code here.
}

3.在LostFocus事件中使用MaskInput值,不必擔心模型何時發生更改。

<thirdParty:MaskInput Value={Binding Path=Phone, UpdateSourceTrigger=LostFocus}, LostFocus=Phone_LostFocus/>

public void Phone_LostFocus(object sender, RoutedEventArgs e) { 
    string currentText = ((MaskInput)sender).Text;
    //rest of event using currentText;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM