簡體   English   中英

如何將 WPF 控件綁定到多個源,但僅顯示最近更新的源

[英]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視圖中解決問題。 例如,您可以將ComboBoxTextBox綁定到單獨的視圖 model 屬性。 然后在視圖 model 中,如果修改了ComboBox選擇,則可以將該數據顯式復制到TextBox屬性,然后更新TextBox.Text屬性。

暫無
暫無

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

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