views:

63

answers:

2

I've got a datagrid with some defined columns and then a row details template. How do I access a control in the row details template within the code behind? I've got a button that I want to programmatically enable/disable, but I can't figure out how to get access to it in the code behind. I've seen this on the MSDN:

http://msdn.microsoft.com/en-us/library/bb613579.aspx

but that's just describing a regular data template, so when I tried that it didn't work. My case is a row details data template. Surely someone has written code to access a control within a datagrid row details template that can comment on this (Would be much appreciated).

A: 

Can you define (or does there already exist) a property on the type of object being displayed in the grid that represents the enabled state of the button? If yes, then it would be much simpler to modify the row detail template to bind the button's IsEnabled property to that property.

Daniel Pratt
Yep, in my view model, I could have a property in the class that is used for the datagrid. So this is one way to do it. And I just figured out how to do it in the code behind class as well. I'll post that as a separate answer. Thanks for your response!
BrianP
A: 

Okay, I figured out how to get this working I had to tweak the code that is posted in that MSDN article in the original question ....

DataGridRow row = (DataGridRow)(KeywordsGrid.ItemContainerGenerator.ContainerFromItem(KeywordsGrid.SelectedItem));

// Getting the ContentPresenter of the row details
DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row);

// Finding Remove button from the DataTemplate that is set on that ContentPresenter
DataTemplate template = presenter.ContentTemplate;
Button button = (Button)template.FindName("RemoveItemButton", presenter);

"KeywordsGrid" is the variable tied to my datagrid. Notice in my call to FindVisualChild, i'm using a "DataGridDetailsPresenter" class instead of a "ContentPresenter" (This was the key ... it forced the FindVisualChild method to iterate all the way through all the contentpresenters until I got to the one for the row details).

BrianP