WPF将事件从App发送到用户控件

时间:2017-05-16 09:57:11

标签: c# wpf wpf-controls

在我的应用程序中,我使用事件来检查网络状态。在MainWindow中,我实例化了一些用户控件(例如,我有3个子用户控件),在其中一个子控件中,我需要将App中的事件捕获到此特定用户控件。

在App中我用它来开始:

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中使用它们?

1 个答案:

答案 0 :(得分: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;
        //}
    }

我希望这会有所帮助。