2010-07-09 65 views
0

我試圖找到一個解決方案,讓一個TextBox秀和來自兩個不同的來源,因爲這小例子驗證數據顯示:WPF的TextBox單獨的驗證源

<TextBox Text="{Binding Port.Name}" 
ValidationSource="{Binding Ship.PortFK}"/> 

這裏的船舶數據對象包含的屬性,其功能作爲港口的外部鑰匙,酒店擁有自己的驗證人。

我已經探索了下面鏈接的ValidationRules的使用,但是這隻給了我PortFK的價值,而我需要帶有驗證屬性的屬性。

http://michlg.wordpress.com/2010/01/29/wpf-custom-validationrule-with-an-additional-parameter/

有誰知道解決這個?

- 編輯 -

我看到我沒有足夠好的解釋我的問題;)。

其實ValidationSource標記不存在於.Net或我自己的程序中,因爲我不知道如何創建一個綁定到屬性的構造,使用它的驗證屬性驗證屬性並以某種方式提供驗證信息到TextBox的驗證結構。

爲了進一步詳細描述的數據對象:

public class Port 
{ 
    public int PortPK { get; set; } 

    [StringLengthValidator] 
    public string Name { get; set; } 

    ... 
} 

public class Ship 
{ 
    [NotNullValidator] 
    public int PortFK { get; set; } 

    ... 
} 

所以TextBox.Text結合應顯示Port.Name而不驗證它。驗證應該在Ship.PortFK上完成,它將顯示是否已將Port設置爲Ship。

- 編輯2 -

形式是用於編輯船舶數據的CRUD形式。 Textbox是一個選擇器控件的一部分,該控件包含顯示Port.Name的TextBox和用於選擇特定端口的按鈕。

驗證應該指示是否爲船舶選擇了端口。爲此,在Ship.PortFK上使用NotNullValidator,如果沒有設置PortFK值,則觸發驗證器並警告用戶選擇一個端口。

因此,用戶可以選擇船舶的特定端口,之後文本框將顯示Port.Name。 由於數據模型定義端口對於船舶是強制性的,因此對文本框的驗證應指示用戶是否尚未爲船舶選擇端口。

+0

我想我現在明白了一點 - 您想要將TextBox的文本綁定到Port.Name,但是您希望爲使用Ship.PortFK的綁定提供ValidationRule。你能解釋一下,給定一個Port對象,你會驗證它嗎?你是否檢查港口是否有船舶分配給它?另外,您如何期望用戶與應用程序進行交互 - 這裏的用例是什麼?我不是100%肯定我可以幫忙,但我會嘗試... – 2010-07-14 11:51:43

+0

它肯定是一個挑釁的問題;) 我有點驚訝,所以很少人有這個問題,我可以發現幾乎沒有類似的應用程序,像這樣... 我已經添加了一些更多的信息到頂端的帖子,描述了這種控制和驗證的使用。 – Boxed 2010-07-15 07:16:58

回答

0

你可以使用MultiBinding嗎? MultiBinding允許您將多個值轉換爲單個值。

<TextBox.ValidationSource> 
    <MultiBinding Converter="{StaticResource multiValueConverter}"> 
    <Binding Path="Ship.Prop1" /> 
    <Binding Path="Ship.Prop2" /> 
    </MultiBinding> 
</TextBox.ValidationSource> 

以上,船舶的兩個屬性被傳遞到名爲multiValueConverter(你需要實現自己的轉換器)的IMultiValueConverter。

您的IMultiValueConverter實現應該將這兩個屬性的值轉換爲單個值,該值可以被綁定到的任何地方消耗 - 根據我的理解,沒有任何東西可以使用 - 但該單個值可能是一個對象[] 。

如果這沒有幫助,也許你可以提供給我們一些更多的源代碼和你綁定的對象的結構?

+0

謝謝你的答案,但這不完全是我的意思,我已經在我的頂級帖子中添加了一些關於我的問題的更多信息。 – Boxed 2010-07-14 08:00:38