2014-06-18 131 views
0

我已經搜索了一個多星期來找到答案,但我不能。WPF綁定源

因爲一些reasone我必須執行Windows.Data.Binding我的自我。所以我創建了一個類,並把私人Binding對象,像這樣:

Public Class Binding 
Inherits MarkupExtension 
Private _Binding As New Windows.Data.Binding 

#Region "Properties" 

Public Property ElementName() As String 
    Get 
     Return _Binding.ElementName 
    End Get 
    Set(value As String) 
     _Binding.ElementName = value 
    End Set 
End Property 

Public Property Mode() As BindingMode 
    Get 
     Return _Binding.Mode 
    End Get 
    Set(value As BindingMode) 
     _Binding.Mode = value 
    End Set 
End Property 

Public Property Source() As Object 
    Get 
     Return _Binding.Source 
    End Get 
    Set(value As Object) 
     _Binding.Source = value 
    End Set 
End Property 
#End Region 
'*Other Properties of Windows.Data.Binding go inside region* 

Public Overrides Function ProvideValue(serviceProvider As IServiceProvider) As Object 
    If serviceProvider Is Nothing Then 
     Return "Design Time" 
    Else 
     Dim k = _Binding.ProvideValue(serviceProvider) 
     Return k 
    End If 
End Function 
End Class 

它的工作。 我需要更改ProvideValue中的一些實現,爲此,我需要找到綁定的來源。比如我有一個像這樣的XAML的對象:

<TextBlock Text={local:Binding Path=UserID} /> 

好吧,我TextBlock必然的什麼...UserID

問題是綁定的來源是什麼?我如何訪問ProvideValue方法?

感謝所有

+0

更多信息我想知道爲什麼你需要實現自己的綁定,您可以使用轉換器,格式串等 – pushpraj

+0

的這是一個想法。 我正在編寫一個公共DLL,它將在這家公司的所有項目上共享,假設有幾個項目和幾個用戶,每個項目中UserAccess都很重要。 我想限制用戶訪問表的特定列,因此,我不希望其他開發人員趕在該策略,他們只是綁定到適當的表和適當的列,但** Myy **'綁定'決定是否該用戶可以閱讀這些值! 我不知道我是否可以說清楚:/ –

回答

1

這裏是如何使用服務提供商來獲取目標的結合

​​

我會建議創建自己的綁定擴展只,如果你是&源的樣本無法使用轉換器和格式來實現同樣的功能,並且如果有特定的需要,也可以做到這一點。

在這裏閱讀有關的IServiceProvider http://msdn.microsoft.com/en-us/library/ee621338.aspx

+0

感謝您抽出時間 也許我無法更好地描述。 但'targetProperty'指'TextBlock'的'Text'屬性,其中'targetObject'與'是相同的。 我想達到**來源**,而不是**目標**。 –

+0

更新了答案以找到綁定的來源。 – pushpraj

+0

再次感謝你, 我以前試過這個,但問題是: 正如你所知道'ProvideValue'函數只被調用一次,因此,如果我們在運行時傳遞DataContext,就不可能檢測到'DataContext'輸入'ProvideValue'! 再次感謝你的時間和精度。 –