2013-07-15 32 views
2

我遇到的一個重複問題是需要爲datagrid創建增強的文本列。我的意思是,這些列的行爲與普通文本列的行爲相似,但具有額外的圖形或功能,如顯示在文本旁邊的圖像。所以我使用模板列,但顯然這是指在產生大量的預計正常文本列的功能,如文本框編輯模板「從頭開始」:WPF - 暴露繼承列的綁定方法

<DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
       <TextBox 
        FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" 
        Text="{Binding Path=[binded text], Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/> 

我想定義一個從DataGridTemplateColumn繼承的列,然後將所有這些代碼轉儲到它中,這樣我就可以將這些列與任何我希望的數據網格重複使用。但是如上所示,我不能在類定義中聲明綁定,因爲這顯然取決於用法。

如何定義一個使用子控件(特別是本例中的單元格編輯文本框)的繼承的datagrid列,但是仍然允許在xaml內部已經用xaml聲明列時爲這些控件設置綁定實際的數據網格?

到目前爲止,我已經試圖揭露做到這一點的方法,但它不工作:

Public Class MyTextColumn 
Inherits DataGridTemplateColumn 
.... 
Public Property EditorBinding As String 
    Get.... 
    Set(value As String) 
     Dim b As New Binding(value) 
     b.Mode = BindingMode.TwoWay 
     b.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus 
     Dim tb = DirectCast(Me.CellEditingTemplate.LoadContent, TextBox) 
     tb.SetBinding(TextBox.TextProperty, b) 
    End Set 
End Property 

不工作,我最好的猜測是我沒有設置Binding.Source,但我沒有想法我應該設置它。它變得非常令人沮喪。

回答

0

因此,如果我正確理解你,你希望能夠將TextBox的文本屬性綁定到父控件上的某個對象,該控件將保存你的子控件。你不能這樣做使用正常的屬性(我猜你有「不能綁定,因爲它不是依賴屬性」異常或類似的東西)。

這就是我通常這樣做沒有任何問題。首先,您需要在後面的代碼中定義依賴項屬性。 This應該告訴你如何在VB.net中做到這一點(我真的很吝嗇VB.net,所以我不會假裝給你任何建議)。檢查VB.net中的第一個示例。你首先需要改變的是從布爾到字符串,你也可能想要改變屬性名稱。注意在示例中保留名稱的「屬性」部分。 GetType(MyCode)應改爲你在哪裏實現依賴屬性(您MyTextColumn類的名稱)

在MyTextColumn XAML類的名字,它應該是這個樣子:

<DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
       <TextBox 
        FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" 
        Text="{Binding Path=IsSpinning, RelativeSource={RelativeSource AncestorType=DataGridTemplateColumn}, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/> 

我已經把原來的屬性名稱IsSpinning,你應該把你的名字。另外,如果基類不是DataGridTemplateColumn,則可能必須修復相關源。這應該拿起任何來自您的自定義控件。

最後一步是使用你的控制:

<controls:MyTextColumn IsSpinning="{binding PropName}"/> 

你基本上把它綁定到任何你想要的字符串。隨時寫出你可能與我的解釋或代碼有任何問題,我會相應地解決我的答案。

+0

對於未答覆您的答案表示歉意。我撕裂了一個手指韌帶,並且本月沒有能夠做很多的代碼:(祝你好運,我將能夠在不久的將來檢查這一點。 – Tekito

+0

對不起,但我沒有得到這個工作。也許你可以發佈complate列定義?要清楚,我想'IsSpinning'綁定到每個行的源對象的屬性。 – Tekito