2010-06-15 17 views
33

पर एक बटन जोड़ना मैं WP12 में DataGrid नियंत्रण बनाना चाहता हूं जिसमें प्रत्येक पंक्ति के पहले कक्ष में एक बटन है। इस बटन पर क्लिक करने से RowDetailsTemplate या सबरो दिखाई देगा। मेरी चिंता यह है कि मैं एक बटन कैसे जोड़ूं जो RowDetailsTemplate दिखाएगा/छुपाएगा?एक WPF डेटाग्रिड

किसी भी मदद की बहुत सराहना की जाएगी

धन्यवाद

उत्तर

47

पहले एक DataGridTemplateColumn बनाने बटन शामिल करने के लिए:

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

जब बटन क्लिक किया जाता है, अद्यतन युक्त DataGridRow के 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

यह ** एक के लिए पाश है सिर्फ ** Yolo के प्रयोग से। – C4u

21

इस की जाँच करें:

XAML:

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

विधि:

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

कक्षा:

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

प्रारंभ कोड:

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; 
संबंधित मुद्दे