Как программно получить доступ к элементу управления данными строки сетки данных - PullRequest
9 голосов
/ 11 августа 2010

У меня есть сетка данных с некоторыми определенными столбцами, а затем шаблон сведений о строке. Как получить доступ к элементу управления в шаблоне сведений о строке в коде позади? У меня есть кнопка, которую я хочу программно включить / отключить, но я не могу понять, как получить к ней доступ в приведенном ниже коде. Я видел это на MSDN:

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

но это просто описание обычного шаблона данных, поэтому, когда я попробовал, это не сработало. Мой случай - это шаблон данных строки. Конечно, кто-то написал код для доступа к элементу управления в шаблоне сведений строки сетки данных, который может комментировать это (будет очень признателен).

Ответы [ 3 ]

8 голосов
/ 11 августа 2010

Хорошо, я понял, как заставить это работать. Мне пришлось настроить код, который опубликован в этой статье MSDN в исходном вопросе ....

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" - это связанная переменнаяк моей таблице данных.Обратите внимание, что в моем вызове FindVisualChild я использую класс «DataGridDetailsPresenter» вместо «ContentPresenter» (это был ключ ... он заставлял метод FindVisualChild перебирать все объекты contentpresenters, пока я не дошел додля подробностей строки).

1 голос
/ 03 августа 2012

Используйте событие DataGrid.LoadingRowDetails!Это гораздо проще.

Я нашел это здесь: Как изменить текст TextBlock, который находится в DataTemplate of Row Details для каждой DataGrid Row Details?:

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";
    }
}
1 голос
/ 11 августа 2010

Можете ли вы определить (или уже существует) свойство типа объекта, отображаемого в сетке, которое представляет включенное состояние кнопки? Если да, то было бы намного проще изменить шаблон сведений о строке, чтобы привязать свойство IsEnabled кнопки к этому свойству.

...