2010-04-09 19 views
12

मेरे पास एक सूचीदृश्य है जिसमें कॉलम में से एक के रूप में एक चेकबॉक्स है। अगर मैं कहीं भी क्लिक करता हूं लेकिन सूची चेक के चयनित इटैम वास्तविक चेकबॉक्स को वर्तमान चयनित पंक्ति पर सेट किया गया है, जैसा कि अपेक्षित है। यदि, दूसरी ओर मैं चेकबॉक्स पर क्लिक करता हूं (पहले पंक्ति पर क्लिक किए बिना) तो चयनित इटैम शून्य या पहले क्लिक की गई पंक्ति है।WPF ListView SelectedItem शून्य

किसी को भी मेरी मदद कर सकते हैं बाहर ....

चीयर्स

<ListView Width="auto" SelectionMode="Single" x:Name="listBox" ItemsSource="{Binding MyData}" SelectedItem="{Binding Path=SelectedMyData}"> 
         <ListView.View> 
          <GridView> 
           <GridViewColumn Header="Date" Width="120"> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <ContentPresenter Style="{StaticResource DateTimeContent}" Content="{Binding MyDate}"/> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
           <GridViewColumn Header="Is Correct" Width="100"> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <CheckBox IsThreeState="False" 
                 Checked="OnChkChecked" 
                 Unchecked="OnChkChecked" 
                 IsChecked="{Binding IsCorrect}"></CheckBox> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
          </GridView> 
         </ListView.View> 
        </ListView> 




            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <CheckBox IsThreeState="False" 
                 Checked="OnChkChecked" 
                 Unchecked="OnChkChecked" 
                 IsChecked="{Binding IsCorrect}"></CheckBox> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
          </GridView> 
         </ListView.View> 
        </ListView> 

उत्तर

16

यह बहुत आसान है, बस अपने चेकबॉक्स पर घटना क्लिक करें संभाल:

private void CheckBox_Click(object sender, RoutedEventArgs e) { 
    var cb = sender as CheckBox; 
    var item = cb.DataContext; 
    myListView.SelectedItem = item; 
} 
+0

+1 वास्तव में बहुत आसान है। मुझे कुछ चश्मा मिलना चाहिए। मैंने आपका जवाब पढ़ा और मैंने सोचा कि आपने सवाल को गलत समझा है। यह मैं था जो आपके उत्तर को गलत समझ गया। बहुत आसान .... धन्यवाद :-) – ozczecho

+0

+1 Kajillion। सरल, काम करता है। इसे प्यार करना। – Riddari

+0

मैं घंटों की खोज कर रहा हूं और यह वही है जो मैं देख रहा था मुझे लगता है! यह पूरी तरह से काम करता है। आपको बहुत - बहुत धन्यवाद! वास्तव में इतना आसान है। – nitefrog

3

आप चेकबॉक्स कि चेक किया गया है के सूचकांक पाने के लिए अपने दृश्य पेड़ पार्स और उस विशिष्ट लिस्टबॉक्स आइटम का चयन करने के लिए है अपने कोड जब भी कुछ चेकबॉक्स चयनित है

तुम भी में रुचि हो सकती

How to get checked items in a WPF ListBox?

और

http://goalbook.wordpress.com/2009/09/05/wpf-checkedlist-control/

+0

+1 .... देर से उत्तर के लिए खेद है। हां, दृश्य पेड़ को पार्स करना था, लेकिन आपके लिंक द्वारा सुझाए गए अनुसार नहीं। फिर भी, उत्तर के लिए धन्यवाद। मेरा जवाब देखें – ozczecho

0

वीर दृश्य पेड़ को पार्स चेकबॉक्स प्राप्त करने का सुझाव दिया। चीजें हैं कि मेरे पास पहले से ही चेकबॉक्स था। मुझे जो चाहिए वह सूचीदृश्य था जिसमें चेकबॉक्स था। आगे के शोध के बाद इस blog post ने मुझे सही दिशा में इंगित किया। चेकबॉक्स पर क्लिक किए गए पंक्ति की सूचीदृश्य प्राप्त करने के लिए कोड यहां दिया गया है:

 private void chkbox_Checked(object sender, RoutedEventArgs e) 
    { 
     DependencyObject dep = e.OriginalSource as DependencyObject; 
     while ((dep != null) && !(dep is ListViewItem)) 
     { 
      dep = VisualTreeHelper.GetParent(dep); 
     } 

     if (dep != null) 
     { 
      IMyViewModel vm = DataContext as IMyViewModel; 
      vm.SelectedThing = (MyListItemViewModel)lst.ItemContainerGenerator.ItemFromContainer(dep); 
      vm.DoSomethingCommand.Execute(e.RoutedEvent.Name.ToLower()); 
     } 
    } 
+0

क्या आपने ** ** majocha के उत्तर का प्रयास किया था? – ANeves

+0

... हाँ, मैंने अपने जवाब में टाइप करने के बाद ... डी ओह .... एक बेहतर समाधान। – ozczecho

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