绑定到ICollectionView时模拟数据未显示

时间:2016-06-29 07:48:15

标签: xaml mvvm binding collectionviewsource icollectionview

如果我将ListBox绑定到ViewModels ObservableCollection或XAML资源CollectionViewSource,则模拟数据会在设计中显示。

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

我的案例中的分组,排序和过滤在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>
代码背后的代码:

namespace Test
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            DataContext = new MainWindowViewModel();

            InitializeComponent();
        }
    }
}

和ViewModel:

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

为了将CollectionViewSource移动到ViewModel,我尝试过的所有方法都不允许我查看模拟数据:

enter image description here

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

我有什么遗漏,或者必须是这样吗? 感谢

0 个答案:

没有答案