Xaml 绑定到ICollectionView时不显示模拟数据

Xaml 绑定到ICollectionView时不显示模拟数据,xaml,mvvm,binding,collectionviewsource,icollectionview,Xaml,Mvvm,Binding,Collectionviewsource,Icollectionview,如果我将我的列表框绑定到ViewModelsObservableCollection或XAML resourcedCollectionViewSource,模拟数据将在设计时显示 有时,CollectionViewSource会因为某些XAML更改而停止显示此数据,但在重建代码后,它会再次用伪数据填充控件 在我的例子中,分组、排序和筛选是在ViewModel中控制的(并从数据库中重试),因此我决定转到基于ViewModel的ICollectionView属性。不幸的是,视图不再获得模拟数据 以下

如果我将我的
列表框
绑定到ViewModels
ObservableCollection
或XAML resourced
CollectionViewSource
,模拟数据将在设计时显示

有时,
CollectionViewSource
会因为某些XAML更改而停止显示此数据,但在重建代码后,它会再次用伪数据填充控件

在我的例子中,分组、排序和筛选是在ViewModel中控制的(并从数据库中重试),因此我决定转到基于ViewModel的
ICollectionView
属性。不幸的是,视图不再获得模拟数据

以下是我的方法的简单示例:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test"

        mc:Ignorable="d"
        d:DataContext="{d:DesignInstance local:MainWindowViewModel }"

        Title="MainWindow" Height="100" Width="525"
    >

    <Window.Resources>

        <CollectionViewSource x:Key="ItemsCollectionViewSource" Source="{Binding ItemsObservableCollection}"/>

    </Window.Resources>

    <UniformGrid Columns="6">

        <ListBox ItemsSource="{Binding ItemsObservableCollection}" Background="WhiteSmoke" />

        <ListBox ItemsSource="{Binding Source={StaticResource ItemsCollectionViewSource}}" Background="LightYellow" />

        <ListBox ItemsSource="{Binding ItemsICollectionView}" Background="WhiteSmoke" />

        <ListBox ItemsSource="{Binding ItemsCollectionView}" Background="LightYellow" />

        <ListBox ItemsSource="{Binding ItemsListCollectionView}" Background="WhiteSmoke" />

        <ListBox ItemsSource="{Binding ItemsBackCollectionViewSource}" Background="LightYellow" />

    </UniformGrid>

</Window>
和视图模型:

using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Data;

namespace Test
{
    public class MainWindowViewModel
    {
        public ICollectionView ItemsICollectionView { get; set; }

        public CollectionView ItemsCollectionView { get; set; }

        public ListCollectionView ItemsListCollectionView { get; set; }

        public ObservableCollection<string> ItemsObservableCollection { get; set; }

        public CollectionViewSource ItemsBackCollectionViewSource { get; set; }

        public MainWindowViewModel()
        {
            ItemsObservableCollection = new ObservableCollection<string> {"a", "b", "c"};

            ItemsICollectionView = CollectionViewSource.GetDefaultView(ItemsObservableCollection);

            ItemsCollectionView = CollectionViewSource.GetDefaultView(ItemsObservableCollection) as CollectionView;

            ItemsListCollectionView = CollectionViewSource.GetDefaultView(ItemsObservableCollection) as ListCollectionView;

            ItemsBackCollectionViewSource = new CollectionViewSource {Source = ItemsObservableCollection};
        }
    }
}
使用System.Collections.ObjectModel;
使用系统组件模型;
使用System.Windows.Data;
名称空间测试
{
公共类MainWindowViewModel
{
公共ICollectionView项目集合视图{get;set;}
公共集合视图项集合视图{get;set;}
公共ListCollectionView项目ListCollectionView{get;set;}
公共ObservableCollection项SobservableCollection{get;set;}
public CollectionViewSource项目BackCollectionViewSource{get;set;}
公共主窗口视图模型()
{
ItemsObservableCollection=新的可观测集合{“a”、“b”、“c”};
ItemsCollectionView=CollectionViewSource.GetDefaultView(ItemsAbservableCollection);
ItemsCollectionView=CollectionViewSource.GetDefaultView(ItemsAsservableCollection)作为CollectionView;
ItemsListCollectionView=CollectionViewSource.GetDefaultView(ItemsBServableCollection)作为ListCollectionView;
ItemsBackCollectionViewSource=new CollectionViewSource{Source=ItemsAbservableCollection};
}
}
}
我尝试过的将CollectionViewSource移动到ViewModel的方法都不允许我查看模拟数据:

我对这些控件进行了一些调试比较,但它们在运行时设置得非常相同。我不知道在设计时进行调试的能力

有什么东西我遗漏了,还是一定是那样的?
谢谢

可能重复:。相关的问题是关于blend的,而我对xaml编辑器有问题(或者也可能称为blend?),也没有任何答案有助于解决此问题。我为此增加了更多的时间,但仍然失败。即使在代码隐藏中将CollectionViewSource创建为属性,也不会提供模拟结果。我在想,它可能与CollectionViewType有关,但在这两种情况下,它的值都为null。要在设计时进行调试(请参见此问题:),可以使用相同的项目打开visual studio,并将调试器附加到第一个visual studio。在第二个VS中设置断点,在第一个VS中刷新设计。。。瞧!可能重复:。相关问题是关于blend的,虽然我对xaml编辑器有问题(或者它也被称为blend?),但也没有任何答案有助于解决此问题。我为此添加了更多时间,但仍然失败。即使在代码隐藏中将CollectionViewSource创建为属性,也不会提供模拟结果。我在想,它可能与CollectionViewType有关,但在这两种情况下,它的值都为null。要在设计时进行调试(请参见此问题:),可以使用相同的项目打开visual studio,并将调试器附加到第一个visual studio。在第二个VS中设置断点,在第一个VS中刷新设计。。。瞧!
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Data;

namespace Test
{
    public class MainWindowViewModel
    {
        public ICollectionView ItemsICollectionView { get; set; }

        public CollectionView ItemsCollectionView { get; set; }

        public ListCollectionView ItemsListCollectionView { get; set; }

        public ObservableCollection<string> ItemsObservableCollection { get; set; }

        public CollectionViewSource ItemsBackCollectionViewSource { get; set; }

        public MainWindowViewModel()
        {
            ItemsObservableCollection = new ObservableCollection<string> {"a", "b", "c"};

            ItemsICollectionView = CollectionViewSource.GetDefaultView(ItemsObservableCollection);

            ItemsCollectionView = CollectionViewSource.GetDefaultView(ItemsObservableCollection) as CollectionView;

            ItemsListCollectionView = CollectionViewSource.GetDefaultView(ItemsObservableCollection) as ListCollectionView;

            ItemsBackCollectionViewSource = new CollectionViewSource {Source = ItemsObservableCollection};
        }
    }
}