2010-09-01 170 views
0

我有一個用戶表,我有一個Book表的外鍵。 FK是ProxyResponsibleUser_ID。當我在我的DataGrid中使用DataGridTextColumn時,任何事情都可以,但現在我想使用DataGridTemplateColumn來顯示用戶表中的FullName列,以便ProxyResponsibleUser_ID對應的用戶使用。由於DataGridTemplateColumn沒有Binding屬性,所以出現錯誤。綁定到DataGridTemplateColumn

那麼,通過DataGridTemplateColumn屬性我將綁定ProxyResponsibleUser_ID? 在此先感謝。

<DataGridTextColumn x:Name="securityConfigurationNameColumn" Binding="{Binding Path=SecurityConfigurationName}" Header="Security Configuration Name" Width="*" /> 
<DataGridTemplateColumn x:Name="proxyResponsibleUser_IDColumn" Binding="{Binding Path=ProxyResponsibleUser_ID}" Header="Proxy Responsible User ID" Width="*" > 
       <DataGridTemplateColumn.CellEditingTemplate> 
        <DataTemplate DataType="{x:Type domain:User}"> 
         <TextBlock Text="{Binding FullName}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellEditingTemplate> 
      </DataGridTemplateColumn> 

回答

1

我看不出你想要做什麼,但綁定必須完全按照你已經做的那樣在TextBlock中完成。因此DataGridTemplateColumn-Tag中的綁定是不必要的。列不需要知道記錄的ID。

如果您希望讓TextBox控件具有可用的id(通常不需要,因爲您可以直接通過DataContext訪問此屬性),那麼可以通過綁定Tag屬性來完成此操作。

<TextBlock Text="{Binding FullName}" Tag="{Binding ProxyResponsibleUser_ID}"/> 

順便說一句,你宣佈在EditTemplate一個TextBlock。也許你想要一個TextBox。或者你想讓用戶更改ID?如果是這種情況,請發表評論。

希望這會有所幫助。

+0

通常,我使用DataGridTextColumn通過Entity FrameWork的用戶導航來顯示FullName。當我更改組合框的選定項目時,我希望更新數據網格值,但是當我這樣做時,出現更新問題。當我直接使用proxyResponsibleUser_ID時,它會自動更新,但在數據網格中顯示Id值而不是Fullname。所以我嘗試了這樣的代碼片段。感謝您的幫助,但沒有奏效。你能爲這樣的問題提出一個解決方案嗎? 再次謝謝.. – cemregoksu 2010-09-01 11:19:16

+0

不,我不想讓任何人編輯列,我誤用了它:現在我用celltemplate – cemregoksu 2010-09-01 11:21:36

+0

作爲EF問題的聲音(鍵和導航屬性之間的同步)。但是我很抱歉,我對EF沒有任何瞭解,因此在這種情況下無法幫助您。然而,對於你寫的問題,DataGridTemplateColumn不需要知道綁定。所有綁定特定的聲明都在DataTemplate/s中完成。我會試着問一個更具體的EF問題來獲得比我更有價值的答案(我的答案只是WPF特定的答案)。 – HCL 2010-09-01 11:30:52

2

我一直在努力解決這個問題很長一段時間,經過多次無果的搜索,我想出了一個可接受的替代品。

給任何其他人尋找這個: 嘗試創建DataGridBoundColumn的自定義實現。您只需要重寫兩個方法:GenerateElement和GenerateEditingElement。

例子:

protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) 
{ 
    Label element = new Label(); 
    element.SetBinding(Label.ContentProperty, Binding); 

    return element; 
} 

用法:

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridCustomColumn Binding="{Binding SomeProperty}" /> 
     <DataGridCustomColumn Binding="{Binding OtherProperty}" /> 
    </DataGrid.Columns> 
</DataGrid> 

雖然我原本打算使用模板,我選擇創建的代碼隱藏我的需求是相當簡單的元素;然而,我沒有看到爲什麼這個不能適應與給定的DependencyProperty註冊的DataTemplates一起工作。

相關問題