WPF:绑定到模态父窗口中的datacontext

时间:2015-07-29 15:34:56

标签: c# wpf xaml data-binding

我正在使用以下方式打开模态窗口:

    public void PropertiesTablesButtonClicked(object sender, RoutedEventArgs e)
    {
        Window _childWindow = new PropertiesTablesWindow();

        // Assign MainWindow as the owner of this window, this will cause the MainWindow
        // to become inactive and make the child window flash if the main window is clicked
        _childWindow.Owner = App.Current.MainWindow;

        _childWindow.ShowDialog();
    }

是否有一种方法可以从PropertiesTablesWindow.xaml中绑定到主窗口的DataContext?主窗口DataContext有一个属性EditMode,它让我知道程序是否处于编辑模式,这反过来将用于使子窗口上的DataGrid为只读或可编辑,如下所示:

            <DataGrid Name="PropertiesDataGrid" 
                      ItemsSource="{Binding PropertiesDataView, UpdateSourceTrigger=PropertyChanged}"
                      SelectedItem="{Binding SelectedProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      AutoGenerateColumns="False"
                      CanUserAddRows="False"
                      MaxHeight="200"
                      IsReadOnly="{Binding RelativeSource={RelativeSource FindAncestor, 
                                          AncestorType={x:Type Application}}, Path=DataContext.EditMode, 
                                          UpdateSourceTrigger=PropertyChanged,
                                          Converter={StaticResource NegatedStringComparisonToBooleanConverter}, ConverterParameter=Admin}">

我尝试过AncestorType of Window和Application,但显然这些都不起作用。

1 个答案:

答案 0 :(得分:0)

不同的窗户有不同的视觉树木。这就是你使用绑定失败的原因。但是为什么不在所有者窗口的datacontext上设置模态窗口的datacontext?它会做的伎俩。当然,您也可以构建一个介体来存储上下文,但第一个解决方案非常简单。