绑定到模态父窗口中的数据上下文

本文关键字:数据 上下文 窗口 模态 绑定 | 更新日期: 2023-09-27 18:05:34

我正在打开一个模态窗口使用:

    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}">

我已经尝试了窗口和应用程序的祖先类型,但显然这些不工作。

绑定到模态父窗口中的数据上下文

不同的窗口有不同的可视树。这就是你绑定失败的原因。但是为什么不将模态窗口的数据上下文设置在所有者窗口的数据上下文上呢?它会起作用的。当然,您也可以构建一个中介来存储上下文,但是第一个解决方案太简单了。