2017-05-16 5 views
1

내 응용 프로그램에서는 이벤트를 사용하여 네트워크 상태를 확인합니다. MainWindow에서는 일부 사용자 컨트롤 (예 : 3 개의 하위 사용자 컨트롤)을 인스턴스화하고 이러한 하위 컨트롤 중 하나에서이 특정 사용자 컨트롤에 대한 이벤트를 잡아야합니다.WPF 응용 프로그램에서 사용자 컨트롤로 이벤트 보내기

protected override void OnStartup(StartupEventArgs e) 
{ 
    NetworkStatus.AvailabilityChanged += 
     new NetworkStatusChangedHandler(DoAvailabilityChanged); 
    base.OnStartup(e); 
} 

static void DoAvailabilityChanged(
    object sender, NetworkStatusChangedArgs e) 
     { 
      //this method will send a notification 
      //ReportAvailability(); 
     } 

나는이 이벤트를 잡을 때, 나는 내 StackPanel에있는 브러쉬를 변경해야

는 응용 프로그램에서 나는이 시작하는 데 사용합니다. 내가 두 개의 브러시를 만든 후에 어떻게 그들을 바꿀 수 있습니까? 맞춤 트리거에 대한 정보를 보았습니다. StackPanel에서 어떻게 사용할 수 있습니까?

+0

콜백은 무엇입니까 DoAvailabilityChanged, 코드 표시 – Coding4Fun

+0

DoAvailabilityChanged는 사용자 컨트롤러에 대한 알림을 보냅니다. 나는 어떻게해야할지 모른다. –

답변

1

나는 터널링 이벤트를 사용했습니다. 아이 뷰 모델에서 :

#region Events 
public readonly static RoutedEvent NetworkStatusEvent = 
     EventManager.RegisterRoutedEvent(
      "NetworkStatusEvent", 
      RoutingStrategy.Tunnel, 
      typeof(RoutedEventHandler), 
      typeof(NetworkStatusViewModel)); 
#endregion 

    public void NetworkStatus_Changed(Object sender, RoutedEventArgs e) 
    { 
     Image = "home-scanner"; 
     IsAvailable = NetworkStatus.IsAvailable ? true : false; 
     TextLegend = "sfsdfhf"; 
     //RaiseEvent(new RoutedEventArgs(NetworkStatusViewModel.GreetEvent, this)); 
     e.Handled = true; 
    } 

MainViewModel에서 :

private static NetworkStatusViewModel networkStatusViewModel = new NetworkStatusViewModel(); 

    public static NetworkStatusViewModel NetworkStatusViewModel 
    { 
     get 
     { 
      return networkStatusViewModel; 
     } 
     //set { 
     // networkStatusViewModel = value; 
     //} 
    } 

나는이 도움이되기를 바랍니다.