2010-03-10 4 views
0

J'essaie de transmettre la chaîne Texte/En-tête de MenuItem sélectionné en tant que MethodParameter à mon objet ObjectDataProvider. J'ai vu des exemples comme ceux-ci sur Internet, mais je n'ai pas été en mesure de l'adapter spécifiquement au menu de contrôle. Je suis nouveau à WPF et j'ai besoin d'aide pour y parvenir. Toute aide serait grandement appréciée.WPF Pass MenuItem sélectionné comme MethodParameter à ObjectDataProvider

est Ci-dessous l'extrait de code, XAML pour la ObjectDataProvider

<Window.Resources> 
    <ObjectDataProvider x:Key="NMInfo" ObjectType="{x:Type local:NMInfoProvider}" MethodName="GetDcmsInfomation" IsAsynchronous="True"> 
     <ObjectDataProvider.MethodParameters> 
      <x:Static Member="system:String.Empty" /> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 
</Window.Resources> 

XAML pour le contrôle Menu

<Menu Name="nmMenu" Height="25" HorizontalAlignment="Stretch" VerticalAlignment="Top" FontSize="12" DockPanel.Dock="Top"> 

     <Menu.BitmapEffect> 
      <DropShadowBitmapEffect/> 
     </Menu.BitmapEffect> 
     <MenuItem Header="File"> 

      <MenuItem Header="SNYC12P10650" IsCheckable="True" ToolTip="Production" Click="MenuItem_Clicked"> 
       <MenuItem.IsChecked> 
        <Binding Source="{StaticResource NMInfo}" Path="MethodParameters[0]" BindsDirectlyToSource="True" Mode="OneWayToSource"/> 
       </MenuItem.IsChecked> 
      </MenuItem> 
      <MenuItem Header="GPRI12D10217" IsCheckable="True" ToolTip="QA" Click="MenuItem_Clicked"> 
       <MenuItem.IsChecked> 
        <Binding Source="{StaticResource NMInfo}" Path="MethodParameters[0]" BindsDirectlyToSource="True" Mode="OneWayToSource"/> 
       </MenuItem.IsChecked> 
      </MenuItem> 
      <MenuItem Header="GPRI12D10219" IsCheckable="True" ToolTip="Dev" Click="MenuItem_Clicked"> 
       <MenuItem.IsChecked> 
        <Binding Source="{StaticResource NMInfo}" Path="MethodParameters[0]" BindsDirectlyToSource="True" Mode="OneWayToSource"/> 
       </MenuItem.IsChecked> 
      </MenuItem> 
      <Separator/> 
      <MenuItem Header="Close"/> 
     </MenuItem> 

    </Menu> 

Répondre

0

Ce que vous devez faire est de lier la propriété d'en-tête, pas isChecked. Je suppose que vous voulez seulement faire ceci quand l'article est vérifié cependant. Bien que ce soit faisable en utilisant un Style pour le MenuItem, je recommanderais de faire ce genre de travail dans un ViewModel. Au lieu d'avoir un objet ObjectDataProvider, votre machine virtuelle exposerait des propriétés booléennes pour chacun des éléments de menu vérifiables.

Lorsque l'une de ces propriétés est modifiée, elle peut appeler cette méthode elle-même et exposer l'objet en tant que propriété en lecture seule. Définissez simplement le DataContext du contrôle entier sur une instance de votre machine virtuelle et les liaisons fonctionneront.

Quelque chose comme ceci:

public class NMInfoViewModel : INotifyPropertyChanged 
{ 
    private bool isSNYC12P10650 = false; 
    public bool IsSNYC12P10650 
    { 
     get { return isSNYC12P10650; } 
     set 
     { 
      if (value == isSNYC12P10650) return; 
      isSNYC12P10650 = value; 
      OnPropertyChanged("IsSNYC12P10650"); 

      if (value) 
       NMInfo = NMInfoProvider.GetDcmsInfomation("SNYC12P10650"); 
     } 
    } 

    ... 

    private NMInfo nMInfo; 
    public NMInfo NMInfo 
    { 
     get { return nMInfo; } 
     private set 
     { 
      if (value == nMInfo) return; 
      nMInfo = value; 
      OnPropertyChanged("NMInfo"); 
     } 
    } 
} 

Et votre MenuItems ressemblerait à ceci:

<MenuItem Header="SNYC12P10650" IsCheckable="True" 
    ToolTip="Production" IsChecked="{Binding IsSNYC12P10650}" /> 
+0

Bonjour Abe, Je vous remercie de votre aide. Pouvez-vous s'il vous plaît laissez-moi savoir comment utiliser le Style sur MenuItem pour atteindre la même chose? Merci, Shravan – Shravan

Questions connexes