2017-05-16 36 views
1

私のアプリケーションでは、ネットワークステータスを確認するイベントを使用します。 MainWindowでは、いくつかのユーザーコントロール(たとえば、3つの子ユーザーコントロールがあります)をインスタンス化し、これらの子コントロールの1つで、この特定のユーザーコントロールにイベントをキャッチする必要があります。アプリで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でブラシを変更する必要があります。私は2つのブラシを作成した後、どのようにそれらを変更することができますか?私はカスタムトリガに関するいくつかの情報を見てきました。 StackPanelでそれらをどのように使用できますか?

+0

あなたのコールバックは何ですかDoAvailabilityChanged、あなたのコードを表示 – Coding4Fun

+0

DoAvailabilityChangedは、ユーザコントローラの通知を送信します。私はそれをする方法を知らない。 –

答えて

1

私はトンネリングイベントを使用しました。私はこれが役に立てば幸い

private static NetworkStatusViewModel networkStatusViewModel = new NetworkStatusViewModel(); 

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

:MainViewModelで

#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; 
    } 

:子のviewmodelで 。

関連する問題