WPF 将事件从 App 发送到用户控件
WPF send event from App to User control
在我的应用程序中,我使用一个事件来检查网络状态。在 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 中使用它们?
我使用了隧道事件。
在子视图模型中:
#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;
//}
}
希望对您有所帮助。
在我的应用程序中,我使用一个事件来检查网络状态。在 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 中使用它们?
我使用了隧道事件。 在子视图模型中:
#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;
//}
}
希望对您有所帮助。