2009-06-20 10 views
7

मेरे पास एक सूची दृश्य के साथ उपयोगकर्ता नियंत्रण है जिसमें एक ऑब्जर्जेबल कोलेक्शन से सरल आइटम शामिल हैं। मैं ListView में चयनित क्या है, इस पर निर्भर करता है कि उस सूची दृश्य के ContextMenu को आइटम शामिल करना चाहूंगा। यदि कोई आइटम नहीं चुना गया है, तो कुछ मेनूइटम दिखाई नहीं दे सकते हैं।बाइंड कॉन्टेक्स्टमेनू मेनू मेनू दृश्य दृश्य सूची दृश्यता

जब मैं ContextMenu खोलता हूं तो मेरा कनवर्टर भी नहीं कहा जाता है। बंधन गलत हो रहा है, मैं उत्पादन विंडो में यह लगता है:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=listView'. BindingExpression:Path=SelectedItem; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'Visibility' (type 'Visibility')

मैं क्या गलत है समझ में नहीं आता और वेब पर खोज कर यह पता लगा नहीं कर सका।

<UserControl x:Class="MyApp.DatabaseControl" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:l="clr-namespace:MyApp" 
Height="Auto" 
Width="Auto"> 

<UserControl.Resources> 
    <l:ValueToVisibilityConverter x:Key="valueToVisibility" /> 
</UserControl.Resources> 

<Grid> 
    <ListView x:Name="listView" ItemsSource="{Binding Persons}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="140" Header="First Name" DisplayMemberBinding="{Binding FirstName}"/> 
       <GridViewColumn Width="140" Header="Last Name" DisplayMemberBinding="{Binding LastName}" /> 
      </GridView> 
     </ListView.View> 

     <ListView.ContextMenu> 
      <ContextMenu> 
       <MenuItem 
        Header="Open" 
        Visibility="{Binding SelectedItem, ElementName=listView, Converter={StaticResource valueToVisibility}}"/> 
       <Separator/> 
       <MenuItem Header="Add..."/> 
       <MenuItem Header="Remove"/> 
      </ContextMenu> 
     </ListView.ContextMenu> 
    </ListView> 
</Grid> 

धन्यवाद एक बहुत:

यहाँ कुछ सरल कोड है!

उत्तर

7

समस्या यह है कि ContextMenuListBox के समान दृश्य पेड़ में नहीं है, इसलिए बाइंडिंग को ListBox नहीं मिला है। यदि आप PlacementTarget के खिलाफ बाध्य करते हैं, तो यह चाल चलाना चाहिए:

<MenuItem Header="Open" 
    Visibility="{Binding RelativeSource={RelativeSource FindAncestor, 
     AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem, 
     Converter={StaticResource valueToVisibility}}" /> 
+0

धन्यवाद, यह चाल है !! – fury

+0

यदि यह आपके प्रश्न का उत्तर देता है, तो आपको इसे स्वीकृत के रूप में चिह्नित करना चाहिए ताकि यह अब अनुत्तरित प्रश्न के रूप में दिखाई न दे। – Andy

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