如何正确地将 DependencyProperty 绑定到 CollectionViewSource?

How to properly bind a DependencyProperty to a CollectionViewSource?

我是 WPF 初学者,在尝试将依赖项 属性 绑定为 CollectionViewSource.

的源时遇到问题

用户控件公开了 List 类型的 DependencyProperty。它用于在 CollectionViewSource 的帮助下在 DataGrid 中呈现数据(使用它进行过滤、分组和排序操作)。

我的MainWindow XAML:

<Window>
   <local:CustomUserControl x:Name="CustomUCDataGrid" ListToDisplay="{Binding listFromDB}"/>
<Window>

我的MainWindow.cs:

public partial class MainWindow : Window
{
    public List<customType> listFromDB{get;set;}
    public MainWindow{
       listFromDB = GetListFromDB();
       InitializeComponent();
       this.DataContext = this;
    }
}

CustomUserControl.xaml 看起来像:

<UserControl x:Name="ParentNode">
   <DataGrid DataContext="{Binding ElementName=ParentNode}">
      <StackPanel>
         <DataGrid x:Name="DirectDataGrid" ItemSource="{Binding ListToDisplay}"/>
         <DataGrid x:Name="DataGridWithCVS" ItemsSource="{Binding cvsList.View}"/>
      </StackPanel>
   </DataGrid>
</UserControl>

CustomUserControl.xaml.cs 看起来像:

public partial class CustomUserControl: UserControl
{
    public List<customType> ListToDisplay{
        get { return (List<customType>)GetValue(ListToDisplayProperty); }
        set { SetValue(ListToDisplayProperty, value); }
    }

    public static readonly DependencyProperty ListToDisplayProperty=
            DependencyProperty.Register("ListToDisplay", typeof(List<customType>),
              typeof(CustomUserControl));

    public CollectionViewSource cvsList { get; set; }

    public CustomUserControl{
        InitializeComponent();
         cvsList = new CollectionViewSource();
         cvsList.Source = ListToDisplay;
         DataGridWithCVS.ItemsSource = CollectionViewSource.GetDefaultView(cvsList);
    }
}

此处名称为 "DirectDataGrid" 的 DataGrid 在显示数据时没有问题从 MainWindow 提供给它,但名称为 "DataGridWithCVS" 的 DataGrid 不显示任何数据。调试时找不到任何错误。

我已经尝试过的东西:

这只是某种疯狂:)

留下代码。
在你的情况下,除了声明 DependecyProperty 之外,那里应该没有任何东西。

<UserControl x:Name="ParentNode">
    <UserControl.Resources>
        <CollectionViewSource x:Key="cvsList"
                Source="{Binding ListToDisplay, ElementName=ParentNode}"/>
    </UserControl.Resources>
    <StackPanel>
        <DataGrid x:Name="DirectDataGrid" ItemsSource="{Binding ListToDisplay, ElementName=ParentNode}"/>
        <DataGrid x:Name="DataGridWithCVS" ItemsSource="{Binding Mode=OneWay, Source={StaticResource cvsList}}"/>
    </StackPanel>
</UserControl>