2010-06-15 34 views
33

Tôi muốn tạo một điều khiển DataGrid trong WPF, trong đó có một nút trong ô đầu tiên của mỗi hàng. Nhấp vào nút này sẽ hiển thị RowDetailsTemplate hoặc SubRow. Mối quan tâm của tôi là Làm thế nào để tôi thêm một nút sẽ hiển thị/Ẩn số RowDetailsTemplate?Thêm một Nút vào một DataFrid WPF

Bất kỳ trợ giúp sẽ được đánh giá cao

Cảm ơn

Trả lời

47

Đầu tiên tạo một DataGridTemplateColumn để chứa các nút:

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

Khi nút được nhấn vào, cập nhật chứa 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

Việc sử dụng vòng lặp này chỉ là ** yolo **. – C4u

21

Kiểm tra này ra:

XAML:

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

Phương pháp:

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

Class:

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)); 
     } 
    } 
} 

Khởi Mã số:

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; 
Các vấn đề liên quan