Wpf 尝试将datagrid项源绑定到另一个类中的属性

Wpf 尝试将datagrid项源绑定到另一个类中的属性,wpf,data-binding,datagrid,Wpf,Data Binding,Datagrid,我有一个带有主窗口的WPF应用程序。主窗口由几个类型为ObservableCollection的CLR属性组成。主窗口有一个datagrid,其ItemsSource属性绑定到一个可观察的集合(工作正常)。接下来,我有一个对话框。其目的是在数据网格中显示主窗口中的一个可观察集合。对话框将在主窗口中实例化。最初,我将ObservableCollection传递给对话框的构造函数,并将其复制到对话框的CLR属性中。然后将对话框的DataContext设置为自身,并将datagrid中的ItemsSo

我有一个带有主窗口的WPF应用程序。主窗口由几个类型为ObservableCollection的CLR属性组成。主窗口有一个datagrid,其ItemsSource属性绑定到一个可观察的集合(工作正常)。接下来,我有一个对话框。其目的是在数据网格中显示主窗口中的一个可观察集合。对话框将在主窗口中实例化。最初,我将ObservableCollection传递给对话框的构造函数,并将其复制到对话框的CLR属性中。然后将对话框的DataContext设置为自身,并将datagrid中的ItemsSource属性绑定到CLR属性的名称。这很有效


有没有更好的方法来代替将可观察集合传递给构造函数?我尝试使用GUI编辑器将对话框中Datagrid的ItemsSource属性设置为主窗口中的observable集合,该编辑器使用RelativeAncestor生成绑定,但数据没有显示。问题是我有一堆对话框,用来显示来自主窗口的数据,我觉得应该有一个更简单的解决方案,而不是将所有内容都传递给对话框的构造函数。此外,对话框会被视为子视图吗?主窗口是一个视图。

假设您的
对话框
控件名为
对话框控件
,并且在其代码后面定义了一个名为
项的
DependencyProperty。在XAML中,我将此属性绑定到
DataGrid
,如下所示:

<DataGrid ItemsSource="{Binding Items, RelativeSource={RelativeSource Mode=
FindAncestor, AncestorType={x:Type DialogControl}}" />
更新>>>

哦,我知道你现在想要什么了。。。您想从
UserControl
绑定到
MainWindow.xaml.cs
文件中的实际集合。您仍然可以遵循我的建议,但是您需要在
main window.xaml.cs
文件中包含
DependencyProperty
而不是
对话框控件中的
DependencyProperty
。在这种情况下,
UserControl
中的绑定将是:

<DataGrid ItemsSource="{Binding Items, RelativeSource={RelativeSource Mode=
FindAncestor, AncestorType={x:Type MainWindow}}" />


要使其正常工作,
Items
属性必须是
dependencProperty

谢谢,但我已经在做了。我没有设置Items字段,而是将其传递给构造函数。它只是一个标准的CLR属性,而不是依赖性属性。这很好,但我只是想知道是否有一种方法可以在不将可观察集合复制到items属性的情况下实现这一点。谢谢,我将尝试该解决方案。你是外星人?哈哈。。。我猜你在谈论我的照片。。。那是Photoshop。
<DataGrid ItemsSource="{Binding Items, RelativeSource={RelativeSource Mode=
FindAncestor, AncestorType={x:Type MainWindow}}" />