2010-06-15 22 views
33

Ich möchte ein Steuerelement DataGrid in WPF erstellen, in dem sich eine Schaltfläche in der ersten Zelle jeder Zeile befindet. Wenn Sie auf diese Schaltfläche klicken, wird RowDetailsTemplate oder SubRow angezeigt. Meine Sorge ist Wie füge ich einen Knopf hinzu, der die zeigt/Versteckt?Hinzufügen einer Schaltfläche zu einem WPF DataGrid

Jede Hilfe sehr geschätzt wird

Dank

Antwort

47

zunächst eine DataGridTemplateColumn erstellen die Schaltfläche enthalten:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Button Click="ShowHideDetails">Details</Button> 
    </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Wenn die Schaltfläche geklickt wird, zu aktualisieren das Enthaltene DataGridRow ‚s DetailsVisibility:

void ShowHideDetails(object sender, RoutedEventArgs e) 
{ 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 
    if (vis is DataGridRow) 
    { 
     var row = (DataGridRow)vis; 
     row.DetailsVisibility = 
     row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
     break; 
    } 
} 
+1

Diese mit einer for-Schleife nur ist ** ** yolo. – C4u

21

Check this out:

XAML:

<DataGrid Name="DataGrid1"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Button Click="ChangeText">Show/Hide</Button> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

Methode:

private void ChangeText(object sender, RoutedEventArgs e) 
{ 
    DemoModel model = (sender as Button).DataContext as DemoModel; 
    model.DynamicText = (new Random().Next(0, 100).ToString()); 
} 

Klasse:

class DemoModel : INotifyPropertyChanged 
{ 
    protected String _text; 
    public String Text 
    { 
     get { return _text; } 
     set { _text = value; RaisePropertyChanged("Text"); } 
    } 

    protected String _dynamicText; 
    public String DynamicText 
    { 
     get { return _dynamicText; } 
     set { _dynamicText = value; RaisePropertyChanged("DynamicText"); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void RaisePropertyChanged(String propertyName) 
    { 
     PropertyChangedEventHandler temp = PropertyChanged; 
     if (temp != null) 
     { 
      temp(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

Initialisierung Code:

ObservableCollection<DemoModel> models = new ObservableCollection<DemoModel>(); 
models.Add(new DemoModel() { Text = "Some Text #1." }); 
models.Add(new DemoModel() { Text = "Some Text #2." }); 
models.Add(new DemoModel() { Text = "Some Text #3." }); 
models.Add(new DemoModel() { Text = "Some Text #4." }); 
models.Add(new DemoModel() { Text = "Some Text #5." }); 
DataGrid1.ItemsSource = models; 
Verwandte Themen