开发者

How to programmatically access a datagrid row details control

开发者 https://www.devze.com 2023-01-11 04:31 出处:网络
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 bu开发者_如何转开发tton that I

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 bu开发者_如何转开发tton 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).


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 content presenters until I got to the one for the row details).


Use the DataGrid.LoadingRowDetails event! It is much more straight forward.

I found this here: How to change Text of TextBlock which is in DataTemplate of Row Details for each DataGrid Row Details?

Example:

xaml

<DataGrid.RowDetailsTemplate>
     <DataTemplate>
         <TextBlock x:Name="Test">Test</TextBlock>
         </DataTemplate>
</DataGrid.RowDetailsTemplate>

c#

private void dgVehicles_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
{
    TextBlock tbTest = e.DetailsElement.FindName("Test") as TextBlock;
    if (tbTest != null)
    {
        tbTest.Text = "Juhuu";
    }
}


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消