2010-08-10 24 views
9

Tanımlanmış bazı sütunlara ve ardından bir satır ayrıntıları şablonuna sahip bir veri kılavuzum var. Arkadaki kod içindeki satır ayrıntıları şablonundaki bir kontrole nasıl erişirim? Programatik olarak etkinleştirmek/devre dışı bırakmak istediğim bir düğme var, ancak arkasındaki kodda ona nasıl erişileceğini anlayamıyorum. MSDN bu gördüm:Bir datagrid satırı ayrıntılarına program aracılığıyla erişme denetimi nasıl yapılır

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

ama bu sadece normal bir veri şablonu anlatan, o yüzden çalıştığında işe yaramadı. Benim durumum bir satır ayrıntıları veri şablonu. Şüphesiz, birileri bu konuda yorum yapabilecek bir datagrid satır ayrıntıları şablonunda bir kontrole erişmek için kod yazmıştır (çok takdir edilir).

cevap

7

Tamam, ben orijinal Söz konusu bu MSDN makalesinde yayınlanmıştır kod çimdik gerekiyordu bu çalışma ....

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" bağlı değişkendir nasıl anladım benim datagrid'im. FindVisualChild çağrımı ile ilgili bildirim, "ContentPresenter" yerine "DataGridDetailsPresenter" sınıfı kullanıyorum (Bu anahtar ... benim için tüm içerik yayıncıları arasında tüm yol boyunca yinelenen FindVisualChild yöntemini zorladı. satır ayrıntıları için).

1

Kılavuzda, etkinleştirilmiş durumu gösteren ızgarada görüntülenen nesne türünü tanımlayabilir misiniz (yoksa zaten var mı)? Evetse, düğmenin IsEnabled özelliğini bu özelliğe bağlamak için satır ayrıntı şablonunu değiştirmek çok daha kolay olurdu.

+0

Evet, benim bakış modelinde, ben bir özellik olabilir datagrid için kullanılan sınıf. Yani bunu yapmanın bir yolu var. Ve ben de sınıfın arkasındaki kodda nasıl yapılacağını anladım. Bunu ayrı bir cevap olarak göndereceğim. Cevabınız için teşekkürler! – BrianP

1

DataGrid.LoadingRowDetails olayını kullanın! İleriye doğru çok daha düz.

burada buldum: How to change Text of TextBlock which is in DataTemplate of Row Details for each DataGrid Row Details?

Örnek:

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"; 
    } 
} 
İlgili konular