2012-02-29 12 views
6

मैं WPF डेटा-ग्रिड का उपयोग कर रहा हूं। डेटा-ग्रिड उपयोगकर्ता में कॉलम-हेडर और पंक्ति-शीर्षलेख होते हैं।सभी का चयन करने के लिए ईवेंट: WPF डेटाग्रिड

स्तंभ शीर्ष लेखों और उन दोनों को रो-हेडर ऊपरी बाएँ कोने में दिखाई दे रहा है, जब हम एक छोटे वर्ग अनुभाग उपलब्ध है। (ऊपरी बाएं कोने में पार अनुभाग जहां कॉलम और पंक्ति शीर्षलेख मिलते हैं।) जब हम उस पर क्लिक करते हैं तो यह डेटा-ग्रिड के भीतर सभी कक्षों का चयन करता है। क्या इसके लिए कोई घटना है? यदि नहीं तो उस घटना को कैसे जाल कर सकते हैं। कृपया मेरा मार्ग दर्शन कीजिए।

आप किसी भी अन्य जानकारी इस समस्या के बारे में की जरूरत है मुझे पता है है।

सादर, प्रियंक

उत्तर

12
में आइटमों की संख्या के बराबर होती है

datagrid कराई आदेश ApplicationCommand.SelectAll संभालती है, इसलिए ध्यान केंद्रित करता है, तो ग्रिड होती है और अपने Ctrl-एक, या आप कोने बटन क्लिक करें, सभी कोशिकाओं चुने गए हैं।

<DataGrid x:Name="dataGrid" .../> 
    <DataGrid.CommandBindings> 
     <CommandBinding Command="ApplicationCommands.SelectAll" Executed="SelectAll_Executed"/> 
    </DataGrid.CommandBindings> 

या आप आदेश कोड में बाध्यकारी जोड़ सकते हैं:: आप XAML में एक CommandBinding जोड़कर इस आदेश अपने आप को संभाल कर सकते हैं

public MyControl(){ 
    InitializeComponent(); 
    ... 
    dataGrid.CommandBindings.Add(new CommandBinding(ApplicationCommands.SelectAll, SelectAll_Executed)); 
} 

हालांकि, वहाँ केवल एक कराई के लिए एक एकल हैंडलर हो सकता है कमांड, इसलिए डिफ़ॉल्ट रूप से इस हैंडलर को जोड़कर यह डेटाग्रिड में काम करने से सभी को चुनने से रोक देगा। अपने हैंडलर में आपको SelectAll को कॉल करने की आवश्यकता है।

private void SelectAll_Executed(object sender, ExecutedRoutedEventArgs e) 
{ 
    Debug.WriteLine("Executed"); 
    dataGrid.SelectAll(); 
} 
0

यह काफी नहीं एक अच्छा समाधान है, लेकिन आप "SelectionChanged" तरह की एक घटना को संभालने और जांच कर सकते हैं चयनित आइटम की संख्या आपके डेटा स्रोत

0

मैं विचारों में पीछे एक कोड का उपयोग कर से बचने के लिए पसंद करते हैं, तो मैं इसे इस तरह से किया है: enter image description here

enter image description here

यह ऊपरी बाएँ कोने का चयन/सभी का चयन रद्द करें पर चेकबॉक्स है ।

समाधान 2 भागों से निर्माण कर रहे हैं: संलग्न गुण और अपवादभूत XAML संरचना:

1)। संलग्न गुण:

public class DataGridSelectAllBehavior 
{ 
    public static bool GetValue(DependencyObject obj) 
    { 
     return (bool)obj.GetValue(ValueProperty); 
    } 

    public static void SetValue(DependencyObject obj, bool value) 
    { 
     obj.SetValue(ValueProperty, value); 
    } 
    public static readonly DependencyProperty ValueProperty = 
     DependencyProperty.RegisterAttached("Value", typeof(bool), typeof(DataGridSelectAllBehavior), new PropertyMetadata(false, 
      (o, e) => 
      { 
       var dg = DataGridSelectAllBehavior.GetDataGrid(o); 
       CheckBox checkBox = o as CheckBox; 

       if (checkBox.IsChecked == true) 
       { 
        dg.SelectAll(); 
       } 
       else 
       { 
        dg.UnselectAll(); 
       } 

      })); 


    public static DataGrid GetDataGrid(DependencyObject obj) 
    { 
     return (DataGrid)obj.GetValue(DataGridProperty); 
    } 

    public static void SetDataGrid(DependencyObject obj, DataGrid value) 
    { 
     obj.SetValue(DataGridProperty, value); 
    } 

    public static readonly DependencyProperty DataGridProperty = 
     DependencyProperty.RegisterAttached("DataGrid", typeof(DataGrid), typeof(DataGridSelectAllBehavior), new PropertyMetadata(null)); 

} 

2) XAML:

<DataGrid ItemsSource="{Binding PendingChanges}" 
      AutoGenerateColumns="False" 
      IsReadOnly="True" 
      SelectionMode="Extended"> 
    <i:Interaction.Behaviors> 
     <behaviors:MultiSelectGridSelectedItemsBehavior SelectedItems="{Binding SelectedPendingChanges, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" /> 
    </i:Interaction.Behaviors> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}}}"> 
      <DataGridCheckBoxColumn.HeaderTemplate> 
       <DataTemplate> 
        <CheckBox 
           behaviors:DataGridSelectAllBehavior.Value="{Binding IsChecked,RelativeSource={RelativeSource Self}}" 
           behaviors:DataGridSelectAllBehavior.DataGrid="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"/> 
       </DataTemplate> 
      </DataGridCheckBoxColumn.HeaderTemplate> 
     </DataGridCheckBoxColumn> 
     <DataGridTextColumn Header="Name" 
          Width="Auto" 
          Binding="{Binding Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
     <DataGridTextColumn Header="State" 
          Width="Auto" 
          Binding="{Binding State, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
     <DataGridTextColumn Header="Folder" 
          Width="*" 
          Binding="{Binding ParentFolderPath, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
    </DataGrid.Columns> 
</DataGrid> 
संबंधित मुद्दे