C# WPF CollectionViewSource数据显示问题

C# WPF CollectionViewSource数据显示问题,c#,wpf,mvvm,binding,collectionviewsource,C#,Wpf,Mvvm,Binding,Collectionviewsource,我有一个组合框设置来显示应用程序名的绑定列表。组合框绑定到的列表类型是observetecollection。我使用CollectionViewSource进行排序,如下所示: <CollectionViewSource x:Key="Apps" Source="{Binding Path=Apps}" > <CollectionViewSource.SortDescriptions> <scm:SortDescrip

我有一个组合框设置来显示应用程序名的绑定列表。组合框绑定到的列表类型是
observetecollection
。我使用CollectionViewSource进行排序,如下所示:

<CollectionViewSource
    x:Key="Apps"
    Source="{Binding Path=Apps}"
    >
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="AppNames" Direction="Ascending"/>
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>
如果我从CollectionViewSource中复制
{Binding Path=Apps}
,并将其放置在ComboBox DataContext中的
{StaticResource Apps}
上,那么一切都会正常工作,当然,除了第一次打开视图时和之后的每次排序之外


我正在试图找出我在CollectionViewSource中做错了什么,这导致第二次加载视图时,组合框中没有显示任何应用程序名称。

让我们看看一些代码,当它关闭时,您在哪里进行清除。您是否确定重新打开窗口后,
应用程序
有价值?您是否在您的
组合框中使用了
IsSynchronizedWithCurrentItem
(true或false)?@RAM是的,应用程序在重新打开时有一个值。当我没有在DataContext中使用
CollectionViewSource
和实际使用
{Binding Apps}
时,我可以反复打开和关闭视图,组合框显示数据,但当我使用
CollectionViewSource
时,视图/窗口的重新打开拒绝在组合框中显示任何数据。对于
IsSynchronizedWithCurrentItem
,我尝试了
true
false
。这是一个非常奇怪的问题。我建议您尝试在
VM
类内部或
窗口后面的代码隐藏中使用
CollectionViewSource
。。。在代码隐藏中使用它是否有效?有一些好的样品。在运行时,通过在某些特定点上放置几个断点来检查代码。@RAM在VM中我添加了公共属性
ICollectionView IApps
,并使其返回
\u apps=CollectionViewSource.GetDefaultView(this.apps)。然后将DataContext更改为指向此新属性。一旦我这样做了,我可以打开和关闭视图任意次数,它仍然正确填充。因此,我真的很困惑,为什么它总是在VM中构建CollectionViewSource,而在V中构建CollectionViewSource时却不使用XAML。让我们看看一些代码,当它关闭时,您在其中执行清除操作。您是否确定在重新打开窗口后,
应用程序
有价值?您是否在您的
组合框中使用了
IsSynchronizedWithCurrentItem
(true或false)?@RAM是的,应用程序在重新打开时有一个值。当我没有在DataContext中使用
CollectionViewSource
和实际使用
{Binding Apps}
时,我可以反复打开和关闭视图,组合框显示数据,但当我使用
CollectionViewSource
时,视图/窗口的重新打开拒绝在组合框中显示任何数据。对于
IsSynchronizedWithCurrentItem
,我尝试了
true
false
。这是一个非常奇怪的问题。我建议您尝试在
VM
类内部或
窗口后面的代码隐藏中使用
CollectionViewSource
。。。在代码隐藏中使用它是否有效?有一些好的样品。在运行时,通过在某些特定点上放置几个断点来检查代码。@RAM在VM中我添加了公共属性
ICollectionView IApps
,并使其返回
\u apps=CollectionViewSource.GetDefaultView(this.apps)。然后将DataContext更改为指向此新属性。一旦我这样做了,我可以打开和关闭视图任意次数,它仍然正确填充。所以我真的很困惑,为什么它总是在VM中构建CollectionViewSource时工作,而在V中构建CollectionViewSource时不使用XAML。
<ComboBox
                SnapsToDevicePixels="True"
                Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Grid.RowSpan="1"
                DataContext="{StaticResource Apps}"
                ItemsSource="{Binding}"
                ItemContainerStyle="{StaticResource ApplicationItemStyle}"
                ItemTemplate="{StaticResource applicationComboTemplate}"
                >
            </ComboBox>
void CleanUpApps()
{
   if (this.Apps != null)
   {
       foreach (var app in this.Apps)
            app.Dispose();

       this.Apps.Clear();
       this.Apps.CollectionChanged -= OnAppsCollectionChanged;
   }
}