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