如何在 WPF 中捕获从子组件到父组件的激活命令?

     2023-02-23     292

关键词:

【中文标题】如何在 WPF 中捕获从子组件到父组件的激活命令?【英文标题】:How to catch activated command from child component to parent component in WPF? 【发布时间】:2018-09-21 05:38:04 【问题描述】:

我有一个包含主菜单的 MainWindow。菜单是一个用户控件,由一个内部带有按钮的 StackPanel 组成。

简化的 XAML 代码如下:

<Window>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <local:MainMenu Grid.Column="0"></local:MainMenu> <!-- the navigation menu -->

        <ContentControl Grid.Column="1" Content="Binding CurrentView" />
    </Grid>
</Window>

<!-- The navigation menu UserControl -->
<UserControl Class="MyApp.MainMenu" ...etc... >
    <StackPanel>
        <Button Style="StaticResource menuButton">To do</Button>
        <Button Style="StaticResource menuButton">Notes</Button>
        <Button Style="StaticResource menuButton">Settings</Button>
        <Button Style="StaticResource menuButton">News</Button>
        <Button Style="StaticResource menuButton">Calendar</Button>
        <Button Style="StaticResource menuButton">...</Button>
        <Button Style="StaticResource menuButton">...</Button>
        <Button Style="StaticResource menuButton">...</Button>
    </StackPanel>
</UserControl>

当然,当单击菜单 UserControl 中的按钮时,我想通知 MainWindow 用户想要导航。 MainWindow 必须更改其CurrentView 属性。显示相应的视图。

我遇到的问题是我无法在组件之间进行任何通信。在 WPF 中实现这一点似乎非常困难。互联网上有 教程,但它们没有很好地解释如何以正确的方式进行操作。 我认为将 Click 事件处理程序添加到 MainMenu 的每个按钮是一个坏主意。我想使用命令来解决这个问题,并使用命令参数来确定点击了什么按钮,如果这是好的做法。

在最理想的情况下,是否可以让菜单只是“发出”事件之类的东西,而窗口会捕捉到它?这样子控件(菜单 UserControl)就不必知道它的父控件。

有人可以帮我吗?

【问题讨论】:

【参考方案1】:

犯了一个错误并查看我的答案。 ContextMenu 不在同一个“上下文”中,并且绑定不容易工作 - 我使用 Forward 命令概念,因此 menutiem 命令被转发到 MainViewModel - 如果您需要更多,请告诉我,请参阅我的项目 CBR 并搜索 ForwardCommand

【讨论】:

【参考方案2】:

有很多方法可以做到这一点。如果您使用的是 MVVM,您可以只进行命令绑定,如果您在 MainWindow 视图模型中说 ExitApp 命令,那么您可以这样做:

<vw:ImgButton Name="Exit" ClickCommand="Binding DataContext.ExitApp, RelativeSource=RelativeSource  AncestorType=x:Type Window,Mode=OneWay"/>

您可以选择在命令参数中提供信息,也可以在 ExitApp 命令中进行切换。

【讨论】:

如何在反应中将数组从子组件发送到父组件?

】如何在反应中将数组从子组件发送到父组件?【英文标题】:Howtosendanarrayfromchildcomponenttoparentcomponentinreact?【发布时间】:2021-08-2413:04:37【问题描述】:我正在创建一个反应应用程序,我必须将一个数组从子组件发送到父组件... 查看详情

如何在Angular 4中将值从子组件传递到父组件

】如何在Angular4中将值从子组件传递到父组件【英文标题】:HowtopassvaluesfromchildtoparentcomponentinAngular4【发布时间】:2018-08-2001:42:45【问题描述】:我在一个Angular4应用程序中工作,我正在尝试将值从子组件传递到父组件。我已经... 查看详情

如何在 Reactjs 中将数据从子组件传递到父组件? [复制]

】如何在Reactjs中将数据从子组件传递到父组件?[复制]【英文标题】:HowcanIpassdatafromchildcomponenttoparentcomponentinReactjs?[duplicate]【发布时间】:2020-09-1920:03:24【问题描述】:我有两个组件,一个是子组件,另一个是父组件。我有条... 查看详情

将变量从子组件传递到父组件

...e(event,index)中获得index,我怀疑event也没有到达。我不知道如何将其传递给父母。我曾尝试将其添加到孩子的props.onChange( 查看详情

我可以从子组件获取计算数据到父组件吗?

】我可以从子组件获取计算数据到父组件吗?【英文标题】:CanIgetcomputeddatafromchildcomponenttoparentcomponent?【发布时间】:2018-10-2900:21:43【问题描述】:有没有办法从子组件获取计算数据到父组件?因为我首先将数据从父级发送到... 查看详情

在 React Native 中将状态从子组件传递到父组件

】在ReactNative中将状态从子组件传递到父组件【英文标题】:PassstatefromchildtoparentcomponentinReactNative【发布时间】:2017-12-0603:28:42【问题描述】:我的应用程序有一个设置屏幕(子组件),您可以在其中更改有关您自己的信息,我... 查看详情

在 Blazor 中将值从子组件传递到父页面的良好做法?

】在Blazor中将值从子组件传递到父页面的良好做法?【英文标题】:GoodpracticetopassvaluesfromchildcomponenttoparentpageinBlazor?【发布时间】:2021-09-1111:53:07【问题描述】:我不确定在Blazor中使用我的方法将对象从子组件传递到其使用父页... 查看详情

如何使用双向数据绑定将数据从子组件传递到父组件?

】如何使用双向数据绑定将数据从子组件传递到父组件?【英文标题】:HowtouseTwo-WayDataBindingtopassdatafromchildtoparentcomponent?【发布时间】:2017-02-2313:26:02【问题描述】:我正在尝试将一个布尔值从我的模态组件传递给我的主要组件... 查看详情

如何将数据从子组件传递到父组件[Angular]

】如何将数据从子组件传递到父组件[Angular]【英文标题】:Howtopassdatafromchildcomponenttoparent[Angular]【发布时间】:2020-04-0510:12:21【问题描述】:我正在学习Angular。我想看看子组件Output是如何将数据传递给父组件的。我浏览了一些... 查看详情

Vue中从子组件导航到父组件

】Vue中从子组件导航到父组件【英文标题】:NavigatingfromchildcomponenttoparentcomponentinVue【发布时间】:2020-11-1017:03:16【问题描述】:我的父组件有几个子组件://moreroutesherepath:\'/organisatie\',name:\'Organisation\',meta:breadCrumb:\'Organisatie\',co... 查看详情

如何从子组件 n Angular 将 FormGroup 对象作为输出发送到父组件

】如何从子组件nAngular将FormGroup对象作为输出发送到父组件【英文标题】:HowtoSendFormGroupObjectasOutputtoParentComponentfromchildcomponentnAngular【发布时间】:2019-11-1113:02:24【问题描述】:我在表单中工作,我有两个组件:我的子组件包含... 查看详情

如何在 vuejs 中从子组件向父组件中的对象发出值?

】如何在vuejs中从子组件向父组件中的对象发出值?【英文标题】:HowtoEmitvaluesfromchildtoanobjectinparentcomponentinvuejs?【发布时间】:2021-04-1009:23:52【问题描述】:我正在尝试使用带有自定义表单输入的子组件并将这些值发送到父组... 查看详情

使用 Vue.js 将信息从子组件传递到父组件

...2017-09-2520:21:06【问题描述】:感谢您阅读我的问题。我对如何在我的Vue.js应用程序中实现这一点存有疑问。父组件:App.vue子组件:Loading.vue、ProductsList.vue、NoProductList.v 查看详情

如何在不调用事件的情况下将数据从子级发送到父级(vue 2)

】如何在不调用事件的情况下将数据从子级发送到父级(vue2)【英文标题】:howtoemitthedatafromchildtoparentwithoutcallinganevent(vue2)【发布时间】:2021-07-2200:32:11【问题描述】:我需要将数据从子组件发送到其父组件(通过发射),一... 查看详情

将数据从子组件传递到父组件(通过路由加载子组件)

】将数据从子组件传递到父组件(通过路由加载子组件)【英文标题】:Passingdatafromchildtoparentcomponent(childloadedviarouting)【发布时间】:2016-09-0523:32:00【问题描述】:我有这个问题。Chat是一个父组件,它有Messages子组件。我有url-s... 查看详情

将数据从子组件传递到父组件Angular4

】将数据从子组件传递到父组件Angular4【英文标题】:passdatafromchildcomponenttoparentcomponentAngular4【发布时间】:2018-02-1510:37:54【问题描述】:我有存储在服务器中的API列表:ServerGetData,如下所示:apis="RepoAssignment":"https://apis.repoAssig... 查看详情

将数据从子功能组件传递到父组件 - React/Typescript

】将数据从子功能组件传递到父组件-React/Typescript【英文标题】:PassingdatafromChildfunctionalcomponenttoparent-React/Typescript【发布时间】:2021-01-2619:52:01【问题描述】:我是React和typescript的新手。我想做的事情:我有一个类组件,它呈现... 查看详情

如何将变量的值从子组件发送到父组件?(代码片段)

...中使用fetchData()。组件CSVDataTable.js正确加载数据。但是,如何从BatchFlights.js的handleChange访问它?BatchFlights.jsimportReact,Component,Fragmentfrom'react';importTopControlsfrom"./layout/batch/TopControls"importMainContentfrom"./layout/batch/MainContent"importstylesfrom"./l... 查看详情