2010-03-10 2 views
0

MethodParameter로 선택된 MenuItem의 Text/Header 문자열을 내 ObjectDataProvider에 전달하려고합니다. 인터넷에서 이러한 예제를 보았지만 메뉴 컨트롤에 특별히 적용 할 수 없었습니다. 나는 WPF에 익숙하지 않고 이것을 달성하는데 도움이 필요하다. 어떤 도움이라도 대단히 감사하겠습니다.WPF MethodData를 ObjectDataProvider에 MethodParameter로 전달했습니다.

다음은 Menu 컨트롤은 머리글 속성의 IsChecked하지 바인딩하기 만하면 무엇

<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> 

답변

0

에 대한 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에 대한 XAML 코드 조각입니다. 비록 당신이 비록 항목이 체크되었을 때 이것을하고 싶다고 가정하고 있습니다. 이 방법은 MenuItem에 Style을 사용하는 것이 가능하지만, ViewModel에서 이런 종류의 작업을하는 것을지지합니다.

VM은 ObjectDataProvider가있는 대신 검사 가능한 각 메뉴 항목에 대해 부울 속성을 표시합니다. 이러한 속성 중 하나가 변경되면 해당 메서드 자체를 호출하여 개체를 읽기 전용 속성으로 노출 할 수 있습니다. 전체 컨트롤의 DataContext를 VM의 인스턴스로 설정하기 만하면 바인딩이 작동합니다. 그래서 같은

뭔가 :

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"); 
     } 
    } 
} 

그리고 당신의 메뉴 아이템

은 다음과 같이 보일 것이다 :

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

안녕하세요 아베, 나는 당신의 도움을 주셔서 감사합니다. 스타일을 MenuItem에서 사용하여 동일한 효과를 얻는 방법을 알려주시겠습니까? 감사합니다. Shravan – Shravan