2013-05-22 7 views
6

में लिस्टव्यू आइटमक्लिक वल्ल्यू कैसे प्राप्त करें हाय मैं एमवीवीएम पैटर्न के साथ विंडोज स्टोर ऐप में काम कर रहा हूं और मुझे रिले कमांड में listview itemclick value को पकड़ने में कुछ समस्या है। अब मुझे चयनित आइटम मान मिला है। लेकिन यह नहीं पता कि itemclickValue कैसे प्राप्त करें। यहां मैंने अपना कोड संलग्न किया है।रिले कमांड

XAML

<ListView x:Name="lstItem" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding ItemList}" Padding="130,0,0,0" SelectedItem="{Binding SelectedItem,Mode=TwoWay}"> 
      <Triggers:Interactions.Triggers> 
       <Triggers:EventTrigger EventName="SelectionChanged"> 
        <Triggers:InvokeCommandAction Command="{Binding SelectedItemCommand}" CommandParameter="{Binding SelectedItem,Mode=TwoWay}"/> 
       </Triggers:EventTrigger> 
      </Triggers:Interactions.Triggers> 
     </ListView> 

ViewModel कोड

private Item _selectedItem; 
    public Item SelectedItem { get { return _selectedItem; } set { _selectedItem = value; NotifyPropertyChanged("SelectedTrends"); } } 



private RelayCommand<Item> _selectedItemCommand; 
    public RelayCommand<Item> SelectedItemCommand 
    { 
     get 
     { 
      return this._selectedItemCommand 
       ?? (this._selectedItemCommand= new RelayCommand<Item>(item=> 
       { 
        MessageDialog messagedialog = new MessageDialog(item.Name,"Test"); 
        messagedialog.ShowAsync(); 
       })); 
     } 

    } 

उत्तर

7

यहाँ अतिरेक का एक सा है:

विकल्प 1:

private Item _selectedItem; 
public Item SelectedItem 
{ 
    get { return _selectedItem; } 
    set { _selectedItem = value; NotifyPropertyChanged("SelectedTrends"); } 
} 



private RelayCommand _selectedItemCommand; 
public RelayCommand SelectedItemCommand 
{ 
    get 
    { 
     return this._selectedItemCommand 
      ?? (this._selectedItemCommand= new RelayCommand(() => 
      { 
       MessageDialog messagedialog = new MessageDialog(selectedItem.Name,"Test"); 
       messagedialog.ShowAsync(); 
      })); 
    } 

} 
: CommandParameter स्पेयर 210

और XAML:

<ListView x:Name="lstItem" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding ItemList}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}" Padding="130,0,0,0"> 
    <Triggers:Interactions.Triggers> 
     <Triggers:EventTrigger EventName="SelectionChanged"> 
      <Triggers:InvokeCommandAction Command="{Binding SelectedItemCommand}" /> 
     </Triggers:EventTrigger> 
    </Triggers:Interactions.Triggers> 
</ListView> 

विकल्प 2: SelectedItem स्पेयर बाध्यकारी:

<ListView x:Name="lstItem" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding ItemList}" Padding="130,0,0,0"> 
    <Triggers:Interactions.Triggers> 
     <Triggers:EventTrigger EventName="SelectionChanged"> 
      <Triggers:InvokeCommandAction Command="{Binding SelectedItemCommand}" CommandParameter="{Binding SelectedItem, ElementName=lstItem}"/> 
     </Triggers:EventTrigger> 
    </Triggers:Interactions.Triggers> 
</ListView> 

और, ViewModel से SelectedItem संपत्ति हटा देंगे जब तक आप कुछ और के लिए इसकी आवश्यकता है।

संपादित

आप किसी आइटम पर क्लिक करें घटना को संभालने के लिए चाहते हैं, आप व्यवहार ग्रिड जिसमें नियंत्रण रखा जाता है उदाहरण के लिए, ItemTemplate DataTemplate माता पिता को नियंत्रित करने के लिए कदम की जरूरत है। यह आपको आइटम पर क्लिक ईवेंट को संभालने देता है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। यहां आपने चयन परिवर्तन के लिए समाधान दिया है। लेकिन मुझे आइटमक्लिक घटना की ज़रूरत है। – user1583834

+0

@ उपयोगकर्ता 1583834: मैंने अपना जवाब संपादित किया। क्या यह मदद करता है? – Marc

+0

हाँ बहुत बहुत धन्यवाद। – user1583834

0

समस्या को हल करने के लिए मैंने शून्य संदर्भ के लिए जिम्मेदार सेटर का मूल्यांकन किया। फिर यह ठीक काम करता था और घटना अब और अन्य तत्वों को नहीं फेंक दिया गया था।

<ListView Name="lstView" ItemsSource="{Binding Path=SimResults}" > 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <i:InvokeCommandAction Command="{Binding SelectedItemCommand}" CommandParameter="{Binding SelectedItem, ElementName=lstView}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.View> 
     <GridView> 
      <GridView.Columns> 
       <GridViewColumn Header="FileUniqueID" Width="Auto" DisplayMemberBinding="{Binding Path=FileUniqueID}" /> 
       <GridViewColumn Header="XML" Width="Auto" DisplayMemberBinding="{Binding Path=XML}" /> 
       <GridViewColumn Header="Request" Width="Auto" HeaderStringFormat="" DisplayMemberBinding="{Binding Path=RequestShort}" /> 
       <GridViewColumn Header="RequestDate" Width="Auto" DisplayMemberBinding="{Binding Path=RequestDate}" /> 
       <GridViewColumn Header="Response" Width="Auto" DisplayMemberBinding="{Binding Path=ResponseShort}" /> 
       <GridViewColumn Header="ResponseDate" Width="Auto" DisplayMemberBinding="{Binding Path=ResponseDate}" /> 
       <GridViewColumn Header="ResendCounter" Width="Auto" DisplayMemberBinding="{Binding Path=ResendCounter}" /> 
      </GridView.Columns> 
     </GridView> 
    </ListView.View> 
</ListView> 
+0

हाय क्लोपेट्रा, आपके उत्तर के लिए धन्यवाद और देर से प्रतिक्रिया के लिए खेद है। मैंने उपरोक्त पूरी एक्सएएमएल संरचना नहीं देखी, इसलिए मैंने अपना उत्तर एक उत्तर के रूप में पोस्ट किया। मैंने सोचा कि शायद मेरा दृष्टिकोण गलत है क्योंकि आप सेल टेम्पलेट टेक्स्ट ब्लॉक पर भी परिभाषित कर सकते हैं और फिर ईवेंट जोड़ सकते हैं। तो सोचा कि शायद वह इस दृष्टिकोण के साथ अपनी कोशिकाओं का निर्माण कर सकता है जो मेरे लिए अलग है। फिर उसने टैब दृश्य में सूची दृश्य का उपयोग नहीं किया था, इसलिए टैब को स्विच करने के बाद मुझे नल अपवाद मिलता है। यह वर्णित नहीं किया गया था। मैंने पहले ही समस्या हल कर दी है।सवाल वास्तव में नकल नहीं किया गया था। शायद आप डाउनवोट को हटा सकते हैं। – user2644964

+0

आह .. मुझे लगता है - स्पष्टीकरण के लिए धन्यवाद :-) कृपया अपने उत्तर को फिर से संपादित करने पर विचार करें और स्पष्ट करें कि यह वास्तव में एक समाधान है। – kleopatra

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