0

我正在开发一个 WPF 应用程序,我希望将父级中的一个事件通知给元素树中的几个子级,以便他们每个人都可以相应地采取行动。我知道RoutedEvent通过向上冒泡事件,可以使用自定义从孩子向其祖先之一发出另一个方向的信号,以便任何祖先元素都可以处理该事件。我想要的是通知孩子父母发生的事件,他们会适当地处理它们。实现这一目标的最佳策略是什么?

编辑:

澄清评论:假设我有父母UserControl。它有一个TabControl,它的内容是几个嵌套UserControl的 child。现在考虑一个场景,我希望TabControl.SelectionChanged()事件在每个 child 中引起一些变化UserControl。如何做到这一点?(每个选项卡的内容是一个UserControl本身可能包含另外几个级别的 childrenUserControl的内容。我希望UserControl底层的内容了解该SelectionChanged()事件并做出相应的响应)。

4

4 回答 4

0

您可以尝试使用 TabItem 的 IsSelected 绑定子元素中的某些属性,例如:

<TabControl>
    <TabItem Header="Second"/>
    <TabItem Name="firstTab" Header="First" >
        <StackPanel >
            <TextBox Height="30" Width="150" Name="tbx1" Text="{Binding ElementName=firstTab,Path=IsSelected}"/>
            <TextBox Height="30" Width="150" Name="tbx2" Text="{Binding ElementName=firstTab,Path=IsSelected, Converter={StaticResource ResourceKey}}"/>
            <TextBox Height="30" Width="150" Name="tbx3" Text="{Binding ElementName=firstTab,Path=IsSelected}" TextChanged="tblk3_TextChanged"/>
        </StackPanel>
    </TabItem>
</TabControl>
于 2013-11-04T09:51:01.833 回答
0

您可以进行数据绑定或触发并监听 Ancestor TabControl.SelectedItem 已更改

于 2013-10-31T09:05:51.927 回答
0

有多种方法可以实现您的要求。如果您的父视图模型具有子视图模型的实例,那么您可以简单地调用它们的方法:

在父视图模型中:

childViewModel.UpdateStatus(someDataObject);
otherChildViewModel.UpdateStatus(someDataObject);

如果你想要一个更多的事件驱动系统,你可以使用delegates:

public delegate void Update(object someDataObject);

将该类型的属性添加到父视图模型:

public Update OnUpdate { get; set; }

将处理程序附加到父视图模型中的每个子视图:

OnUpdate += childViewModel.OnUpdateHandler;
OnUpdate += otherChildViewModel.OnUpdateHandler;

然后delegate从父视图模型调用:

if (OnUpdate != null) OnUpdate(someDataObject);

如果您的父视图模型无权访问子视图模型对象,那么也许您可以将属性添加到子视图,然后Bind从父视图模型添加到它们:

<YourXmlNamespace:ChildView UpdateValue="{Binding DataContext.SomeDataObjectProperty, 
    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type 
    YourXmlNamespace:ParentView}}}" />
于 2013-10-31T09:40:47.737 回答
0

我认为,此示例将对您有所帮助: http: //akashsoni7.blogspot.com/2012/12/c-notify-parent-from-child-using-events.html

于 2013-10-31T11:33:39.440 回答