2016-11-29 1 views
0

문자열의 배열로 메뉴의 일부를 정의하고 각각에 대해 클릭 이벤트를 자동으로 만들고 싶습니다. 그들 모두는 똑같은 것으로 갈 것이며, 단지 다른 매개 변수 일뿐입니다.WPF에서 click 이벤트 만들기 문자열로 정의 된 MenuItem

 foreach (string item in goTos) 
     { 
      System.Windows.Controls.MenuItem goTo = new System.Windows.Controls.MenuItem(); 
      goTo.Header = item; 
      goTo.Name = "mnu" + item; 
      mnuGoTo.Items.Add(goTo); 
     } 

어떻게 이러한 이벤트를 클릭 얻을 수 있습니다

string[] goTos = new string[] { "First", "Second", "Third" }; 

창을 초기화 할 때?

+0

이벤트 처리기를 추가하고 이벤트 처리기 메서드 내에서 처리기 메서드의 'sender' 매개 변수를 검사하여 처리기를 호출하는'MenuItem '을 결정하면됩니다. – Adwaenyth

+0

머리글을 어떻게 추출 할 수 있습니까? – FanFu

+0

핸들러 메소드에 전달 된'sender' 객체는'MenuItem' 객체입니다. 그래서'(보낸 사람으로 MenuItem) .Header'를 사용한다면 당신은 원하는 것을 모두 얻을 수 있습니다. (핸들러가 다른 컨트롤에서도 호출 될 수 있으면 null 체크를 추가해야 할 수도 있습니다.) – Adwaenyth

답변

0

당신은 그들이 내가 제안

"같은 일에가는 '경우 당신이보기에

<MenuItem Name="MenuItems" Header="Item1"> 
    <i:Interaction.Triggers> 
      <i:EventTrigger EventName="Click"> 
       <ei:CallMethodAction TargetObject="{Binding}"MethodName="Event"/> 
      </i:EventTrigger> 
    </i:Interaction.Triggers> 
</MenuItem> 

을 사용하여이

string[] goTos = new string[] { "First", "Second", "Third" }; 
     foreach (string item in goTos) 
     { 
      System.Windows.Controls.MenuItem goTo = new System.Windows.Controls.MenuItem(); 
      goTo.Header = item; 
      goTo.Name = "mnu" + item; 
      goTo.Click += new RoutedEventHandler(goTo_Click); 
      mnuGoTo.Items.Add(goTo); 
     } 

    } 

    void goTo_Click(object sender, RoutedEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
1

을 시도하고에 이벤트 방법을 추가 할 수 귀하의 Viewmodel

MVVM을 프로젝트에 사용하지 않는 경우, 이것이 완벽한 학습 시간입니다.

+0

분명히 살펴볼 것입니다! – FanFu

+0

ViewModel에서 MethodName에 대한 메소드를 만듭니다. –