如何绑定到窗口的命令?

时间:2011-11-06 12:07:14

标签: c# wpf xaml data-binding dependency-properties

我在名为“RefreshCommand”(ICommand类型)的用户控件上有一个依赖项属性,我想在主窗口中绑定到Command。

如果我在代码中写这个,它可以工作......

MainToolbar.RefreshCommand = (ICommand)this.CommandBindings[0].Command;

..但我怎么能在XAML中表达呢?

我还想通过名称而不是索引来引用命令。

谢谢,

2 个答案:

答案 0 :(得分:1)

您可以通过例如

将XAML绑定到其他XAML元素
  • 元素名称:

RefreshCommand="{Binding ElementName=window, Path=CommandBindings[0].Command}"

  • 关于“你自己”的属性

RefreshCommand="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=CommandBindings[0].Command}"

  • 使用AncestorType
  • 沿着树向上

RefreshCommand="{Binding Path=CommandBindings[0].Command, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"

如果工具栏是来自窗口的孩子,我想第三个应该可以正常工作。

答案 1 :(得分:0)

我建议你这样做。

3个课程

MainWindow.xaml (Window)
MainViewModel.cs (Class)
UserControl.xaml (UserControl)

将MainWindow的数据上下文设置为ViewModel。除非您明确更改,否则UserControl将保留此数据上下文。在用户控件/主窗口上设置控件以绑定到主视图模型上的中继命令。

这将为您提供所需的上下文,无需硬编码索引(xxx。[0])并仍然保持一定程度的分离。