[英]How to bind a WPF control to multiple sources but only display the most most recently updated source
我有一個要綁定到兩個源(源 A 和源 B)的 TextBox。 我想在更新時顯示源 A,在用戶提供輸入時顯示源 B。 我不想同時顯示來自兩個來源的數據。
我嘗試使用優先級綁定,但這似乎並沒有按照我想要的方式工作。
<TextBox>
<TextBox.Text>
<PriorityBinding>
<Binding ElementName="Features_ComboBox" Path="SelectedItem.Address" Mode="OneWay" />
<Binding Path="UserAddress" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay"/>
</PriorityBinding>
</TextBox.Text>
<TextBox>
理想情況下,文本框將在“Features_ComboBox”選定項更改時更新,但如果用戶在文本框中寫入,它將更新“UserAddress”屬性(因此是模式設置)。
相反,“Features_ComboBox”會更新文本框,但 UserAddress 永遠不會更新。
我也嘗試過使用 MultiBinding,但我不太成功。 任何想法如何做到這一點?
從文檔中:
綁定引擎從列表中的第一個綁定開始,並驗證該綁定是否成功返回值; 如果是,則使用該綁定中的值。 如果第一個綁定沒有成功返回值,綁定引擎會檢查第二個綁定是否成功返回值; 如果是,則來自第二個綁定的值將成為活動值。 此驗證過程繼續到綁定列表的末尾。 如果沒有任何綁定成功返回值,則綁定使用 FallbackValue。
綁定引擎繼續監聽所有綁定的變化。 如果在任何時候具有更高優先級的綁定之一成功返回值,則該綁定的值將成為活動值並替換當前值。
請注意,要使用的Binding
的選擇僅基於對綁定源的更新。 如果源未更改,則活動綁定不會更改。 此外,在您自己的示例中,即使源屬性UserAddress
已更改,該綁定仍不會變為活動狀態,因為您將 Binding object 置於比ComboBox
Binding
低的優先級。
PriorityBinding
object 將始終在其列表中優先選擇更高優先級,即更早排序的綁定。 只要該綁定產生一個值,就不會選擇其他綁定。
PriorityBinding
object 根本沒有您想要的行為。 這是一種完全不同的場景。
建議您在model視圖中解決問題。 例如,您可以將ComboBox
和TextBox
綁定到單獨的視圖 model 屬性。 然后在視圖 model 中,如果修改了ComboBox
選擇,則可以將該數據顯式復制到TextBox
的源屬性,然后更新TextBox.Text
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.