2011-03-28 102 views
3

長版本: 我有一個簡單的WPF轉換器比我的日期轉換。轉換器基本上檢查日期並以dd/M/yyyy格式格式化。轉換器在處理日期時會有一些智慧,這意味着用戶可以鍵入「23061971」,並將該值轉換爲「23/06/1971」。WPF轉換器可以訪問它綁定到的控件嗎?

這一切都是微不足道的和工作。問題是,當我更新值時,它不更新插入位置。假設「|」是插入符號和用戶鍵入「23061971 |」那麼毫秒後它會更新爲「230619 | 71」。

我想要做的是檢測值是否在插入尾部 - 如果是,則在新值更新後將其移至編輯字段的末尾。爲了做到這一點,我需要訪問轉換器所附的編輯控件。

簡短版本: 從WPF轉換器,我可以得到綁定到該轉換器的控件的引用嗎?

回答

0

我不希望轉換器有任何方法可以控制使用它。這只是將一個對象轉換爲另一個對象的一個​​簡單邏輯。

但是,在您的情況下,也許您可​​以捕獲更改事件,然後手動移動插入符號。如果你仔細想一想,插入符號的位置是嚴格意義上的問題;它與轉換器或數據無關。你不應該加載視圖控制器邏輯。你絕對不應該用轉換器邏輯(它被歸類在工具類中)。

1

在ValueConverter中,您無法訪問該控件 - 但是,如果您在多值轉換器中使用多重綁定,則可以訪問該控件。

在多重綁定中,第一個綁定是你現在的綁定 - 沒有轉換器。你綁定到控件本身的第二個綁定 - 你可以訪問控件。

我已經使用這種方法來獲得其他東西也可以使你想觸發更新的屬性的「虛擬」綁定,即如果你綁定到控制本身,你將只會得到更新,如果它改變,而不是如果一個屬性的確如此 - 爲這些創建dummybinding。

0

您可以使用MultiBinding像這樣發送控件。

<TextBox Height="100" x:Name="textbox1" DockPanel.Dock="Top"> 
     <TextBox.Text> 
      <MultiBinding Converter="{StaticResource MultiConverter}"> 
       <Binding ElementName="textbox1" Path="." /> 
      </MultiBinding> 
     </TextBox.Text> 
    </TextBox> 
2

這裏是如何從一個轉換器內得到控制直接訪問的優秀文章:http://social.technet.microsoft.com/wiki/contents/articles/12423.wpfhowto-pass-and-use-a-control-in-it-s-own-valueconverter-for-convertconvertback.aspx

本質:

<MultiBinding Converter="{StaticResource MyConverter}" > 
    <Binding RelativeSource="{RelativeSource Self}" Mode="OneTime"/> 
    <Binding Path="MyValue2" /> 
</MultiBinding> 

轉爐values[0]將是你的控制,準備好以鑄造和values[1]將是你綁定的數據。