WPF - 从子页面调用窗口函数

时间:2009-11-10 20:08:33

标签: wpf window

我有WPF窗口,它使用dockpanel和菜单控件。我有代码根据用户ID创建菜单选项。

在此窗口中,我有一个包含WPF页面的框架。我在页面上执行所有身份验证,然后拥有要使用的窗口的用户ID。但是,我无法让父窗口“刷新”并使用新的ID信息创建菜单栏。窗口加载时,我没有运行命令来显示菜单栏。我已经尝试将它放在它自己的公共函数中并从页面调用它,但这似乎不起作用。

必须有一个我缺少的窗口方法,可以根据页面的调用显示菜单栏。

1 个答案:

答案 0 :(得分:0)

听起来你仍然在WinForms风格的程序上思考。你在WinForms中描述的是必要的,但在WPF中它通常要容易得多:只使用数据绑定。只要您的菜单项是从“UserID”依赖项属性(或基于它启用/禁用)生成的,那么您需要做的就是设置UserID DependencyProperty,UI将自动更新而不需要额外的代码。

以下是如何将UserID转换为Window或上下文对象的DependencyProperty:

  • 在您的窗口或上下文对象中创建“UserID”DP
  • 使您的窗口或上下文对象成为页面的DataContext
  • 在身份验证代码的最后,设置DataContext.UserID(或者在页面上创建一个UserID属性,并使用双向绑定将Window绑定到它)

在DependencyProperty中拥有UserID后,有很多方法可以在菜单项发生变化时自动更新:

  • 在每个菜单项中,使用适当的转换器将其可见性绑定到窗口上的UserID DP(使用转换器参数来区分项目), - OR -
  • 使用转换器设置ItemsSource,以便过滤项目-OR -
  • 创建一个PropertyChangedCallback,在用于菜单项的CollectionView上设置过滤器,-OR-
  • 其他一些技巧(还有许多其他好方法)

对于典型情况,我们在这里讨论的不到10行C#,不包括DependencyProperty声明。