【问题标题】:WPF send event from App to User controlWPF 将事件从 App 发送到用户控件
【发布时间】:2017-05-19 22:50:59
【问题描述】:

在我的应用程序中,我使用事件来检查网络状态。在 MainWindow 中,我实例化了一些用户控件(例如,我有 3 个子用户控件),并且在其中一个子控件中,我需要将事件从 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 中使用它们?

【问题讨论】:

  • 你的回调DoAvailabilityChanged是什么,给我们看看你的代码
  • DoAvailabilityChanged 是为用户控制器发送通知。我不知道该怎么做。

标签: c# wpf wpf-controls


【解决方案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;
        //}
    }

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多