2012-04-12 24 views
9

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

<ListBox> 
    <ListBox.GroupStyle> 
     <GroupStyle> 
      ... 
     </GroupStyle> 
    </ListBox.GroupStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ContextMenu> 
        <ContextMenu Name="cm"> 
         <MenuItem Header="Open" 
            cal:Message.Attach="Open($dataContext)"> 

         </MenuItem> 
       </Grid.ContextMenu> 

       <TextBlock VerticalAlignment="Center" > 
        .. text.. 
       </TextBlock> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

मुझे लगता है यह है तथ्य यह है कि दृश्य पेड़, अलग है इसलिए Caliburn मज़बूती से विधि हल करने में असमर्थ है साथ क्या करना है:

मैं निम्नलिखित XAML (स्पष्टता के लिए संक्षिप्त) की है। मुझे यकीन है कि यह एक आम समस्या है, और मैंने कुछ चीजें जो मैंने ऑनलाइन पाई हैं, कोशिश की है, लेकिन कुछ भी काम नहीं कर रहा है।

कोई विचार ??

उत्तर

20

जानकारी मैं Caliburn Micro site मैं अपने XAML इस तरह देखने के लिए संशोधित पर पाया का उपयोग करना:

<Grid Background="White" HorizontalAlignment="Stretch" Height="200" Name="GridLayout">  
    <ListBox x:Name="ListBoxItems">    
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid Tag="{Binding DataContext, ElementName=GridLayout}"> 
        <Grid.ContextMenu> 
         <ContextMenu Name="cm" cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"> 
          <MenuItem Header="Open" 
           cal:Message.Attach="Open($dataContext)"> 
          </MenuItem> 
         </ContextMenu> 
        </Grid.ContextMenu> 

        <TextBlock VerticalAlignment="Center" > 
       .. text.. 
        </TextBlock> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

और मेरे विचार मॉडल:

public List<string> ListBoxItems { get; set; } 
    public ShellViewModel() 
    { 
     ListBoxItems = new List<string> {"One", "Two", "Three"};   
    } 

    public void Open(object source) 
    { 
     MessageBox.Show((string) source); 
    } 

ओपन सफलतापूर्वक से उचित तार के साथ बुलाया गया था सूची बाक्स।

+0

मैं इसे आज़माएगा। – jonnii

+2

मुझे आश्चर्य है कि यह क्यों नहीं था। मुझे बहुत मदद की, धन्यवाद। –

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