2009-11-26 18 views
7

मेरे पास एक चेकबॉक्स युक्त कॉलम वाला डेटाग्रिड है। मैं बाध्य करें संपत्ति के मूल्य में परिवर्तन करना चाहते जब पंक्ति क्लिक किया जाता है:सिल्वरलाइट डाटाग्रिड पंक्ति

alt text http://lh4.ggpht.com/_L9TmtwXFtew/Sw6YtzRWGEI/AAAAAAAAGlQ/pntIr2GU6Mo/image_thumb%5B3%5D.png

नोट: मैं जब केवल एक है वहाँ SelectedItemChanged घटना उपयोग करने के लिए है क्योंकि यह ठीक से काम नहीं करता है नहीं करना चाहती ग्रिड में पंक्ति।

+0

क्या आप फिर से क्लिक होने पर टॉगल करना चाहते हैं? क्या पंक्ति पर कहीं भी है जहां क्लिकिंग का प्रभाव नहीं होना चाहिए? – AnthonyWJones

उत्तर

7

जैसा कि अक्सर रास्ता मैं इस के लिए अपने ही समाधान मिल गया है है:

private void dgTaskLinks_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
      { 
       ///get the clicked row 
       DataGridRow row = MyDependencyObjectHelper.FindParentOfType<DataGridRow>(e.OriginalSource as DependencyObject); 

       ///get the data object of the row 
       if (row != null && row.DataContext is TaskLink) 
       { 
        ///toggle the IsSelected value 
        (row.DataContext as TaskLink).IsSelected = !(row.DataContext as TaskLink).IsSelected; 
       } 

      } 
:

<data:DataGrid x:Name="dgTaskLinks" 
ItemsSource="{Binding TaskLinks}" 
SelectedItem="{Binding SelectedTaskLink, Mode=TwoWay}" 
MouseLeftButtonUp="dgTaskLinks_MouseLeftButtonUp" 
>... 

और walk the visual tree डेटा ग्रिड पंक्ति पाने के लिए:

datagrid करने के लिए एक MouseLeftButtonUp घटना जोड़ें

एक बार पाया गया, यह बाध्य आईएसईलेक्टेड संपत्ति को टॉगल करने का एक आसान तरीका है :-)

आशा है कि यह किसी और की मदद करेगा।

+0

मुझे आपका समाधान पसंद है। यह मेरी तुलना में थोड़ा और अधिक समझ में आता है। हालांकि, मैं सोच रहा हूं कि आपको यह 'MyDependencyObjectHelper' कक्षा कहां से मिली है। मैं इसे अपना कस्टम कोड मानता हूं। इसे साझा करने की देखभाल? –

+0

यह "दृश्य दृश्य पेड़" के तहत उत्तर में जुड़ा हुआ है। GLad इससे मदद मिली, मार्क –

+0

+1 ग्रेट सॉल्यूशन! मैंने एक चेक बॉक्स को "ऑटो सिलेक्ट" करने के लिए ग्रिड को हैक करने की कोशिश करने में 3 घंटे बिताए और लगभग सुरुचिपूर्ण के साथ कुछ भी नहीं आया। –

0

यहाँ एक भी सरल समाधान है

XAML

<data:DataGrid 
x:Name="dgMyDataGrid" 
ItemsSource="{Binding MyList}" 
SelectedItem="{Binding MyList, Mode=TwoWay}" 
MouseLeftButtonUp="dgMyDataGrid_MouseLeftButtonUp">... 

सीएस

private void dgMyDataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    DataGrid dg = (sender as DataGrid); 
    var allObjects = dg.DataContext as List<MyCustomObject>; 
    foreach(var o in allObjects) 
    { 
      o.Selected = false; 
    } 

    MyCustomObject SelectedObject = (MyCustomObject)dg.SelectedItem; 
    SelectedObject.Selected = true; 
} 

नोट: इस के साथ ही अन्य उदाहरण अपने वर्ग है कि आप नियंत्रण लागू करने के लिए बाध्यकारी हैं मान लिया गया है INotifyPropertyChanged

संबंधित मुद्दे