2012-07-10 19 views
1

我有一個包含ComboBox的列的數據網格。我爲我的組合框設置了Name,但是這個名字在代碼中不可見,爲什麼?在XAML中可見的名稱

<DataGrid ...> 
    <DataGrid.Columns> 
     <DataGrid.TemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox Name="mex" Style="{DynamicResource ComboBoxStyle}" 
           ItemsSource="{Binding Path=combolist}" 
           SelectionChanged="status_SelectionChanged" Height="auto" Width="Auto"> 
        </ComboBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGrid.TemplateColumn> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 

在C#代碼mex是空的,不可見的,爲什麼呢?我也試過x:Name="mex",但它仍然不可見。

C#:

mex.ItemsSource = dt; 

undifined mex

+0

這個'ComboBox'在哪裏? MainWindow.xaml? App.xaml中?資源字典? – user7116 2012-07-10 13:43:52

+0

組合框插入數據網格 – MexVl 2012-07-10 13:45:43

+0

這不是非常具體。你能告訴我們更多的代碼嗎?我很確定我知道你的問題是什麼,但我不能100%確定你的代碼段。 – user7116 2012-07-10 13:47:37

回答

3

一個DataGridColumn從未真正在邏輯或Visual樹;它始終是DataGridRowDataGridCells,因爲它們是爲DataGrid中的每一行自動創建的。

到達組件的唯一方法是構建一個複雜的綁定或使用邏輯或視覺樹幫助程序找到它。

順便說一句,您應該將您的ComboBoxItemsSource設置爲Bindings,以便將該行中的可用數據設置爲。您不能在DataGridTemplateColumn內使用ElementName創建綁定,因爲它不在邏輯樹或可視樹中。

我找到了一個有趣的鏈接,解釋了DataGrid的可視化樹:http://blogs.msdn.com/b/vinsibal/archive/2008/08/14/wpf-datagrid-dissecting-the-visual-layout.aspx

0

當元素存儲在項目模板中時,不能直接引用元素。通常情況下,您希望允許viewmodel通過將datacontext設置爲父對象來處理綁定,然後允許項目模板中的元素選取該對象。然而,根據你的問題,它看起來好像你試圖直接從後面的代碼做到這一點。

下面是兩個類似的問題和解決方案,用於設置項目的datacontext以及引用項目模板中的元素。希望這有助於

Access parent DataContext from DataTemplate

WPF - ItemsControl - How do I get find my "CheckBox" item that is in the ItemTemplate?

0

,因爲模板是用於所有rows.if名可用。必須有可視化樹同名一次。

相關問題