Как использовать CollectionViewSource с данными времени разработки в Expression Blend?

Мне интересно, как я могу показать данные времени разработки в Expression Blend, которая находится внутри SampleData.xaml, используя CollectionViewSource? Прежде чем изменить свой код для использования CVS, я использовал ObservableCollection. Мне нужно было фильтровать и сортировать элементы внутри, поэтому я изменил код для использования CVS. Теперь мой дизайнер жалуется, что не может заполнить элементы NextItem SampleData правильной структурой, которая будет отображаться в Expression Blend. Вот некоторый код, который я использую внутри приложения:

MainViewModel.cs

class MainViewModel
{
    public MainViewModel()
    {
        AllItems = new ObservableCollection<ItemViewModel>();
        NextItems = new CollectionViewSource();
        NextItems.Source = AllItems;
    }

    public CollectionViewSource NextItems
    {
        get;
        private set;
    }

    public ObservableCollection<ItemViewModel> AllItems
    {
        get;
        private set;
    }

    some functions to fill, filter, sort etc...
}

MainView.xaml:

<phone:PhoneApplicationPage
    ... some other stuff ...
    d:DesignWidth="480"
    d:DesignHeight="728"
    d:DataContext="{d:DesignData SampleData/SampleData.xaml}">

    <Grid
        x:Name="LayoutRoot"
        Background="Transparent">
        <controls:Panorama>
            <controls:PanoramaItem>
                <ListBox ItemsSource="{Binding NextItems.View}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <Image Source="{Binding Image}" />
                                <StackPanel>
                                    <TextBlock Text="{Binding FullName}" />
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </controls:PanoramaItem>
        </controls:Panorama>
    </Grid>
</phone:PhoneApplicationPage>

SampleData.xaml

<local:MainViewModel
    xmlns:local="clr-namespace:MyAppNamespace"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:swd="clr-namespace:System.Windows.Data;assembly=System.Windows" >
    <local:MainViewModel.AllItems>
        <local:ItemModel
            FullName="Dummy"
            Image="/Images/dummy.png" />
    </local:MainViewModel.AllItems>

    <local:MainViewModel.NextItems>

        How to fill the CollectionViewSource's Source?

    </local:MainViewModel.NextItems>
</local:MainViewModel>

Таким образом, вопрос, на который я не могу найти ответ, состоит в том, как заполнить Источник для NextItems в SampleDate.xaml? Любая помощь приветствуется.

Ответы на вопрос(1)

Если вы хотите показать пример данных в конструкторе, я бы порекомендовал вам сделать это из кода. Существует два способа создания образцов данных для дизайнера Blend или дизайнера VStudio:

From an XML file as you do. From a c# class -> Best option

лучший вариант

В WPF, в Windows 8 и в WP7.5 и выше, вы можете получить доступ к свойству под названием:Windows.ApplicationModel.DesignMode.DesignModeEnabled используя его, вы можете заполнить ваш ObservableCollection из вашей модели представления:

    public class MainViewModel
{
    public MainViewModel()
    {
        AllItems = new ObservableCollection<ItemViewModel>();

        if (DesignMode.DesignModeEnabled)
        {
            AllItems = FakeDataProvider.FakeDataItems;
        }
        NextItems.Source = AllItems;
    }

    public CollectionViewSource NextItems
    {
        get;
        private set;
    }

    public ObservableCollection<ItemViewModel> AllItems
    {
        get;
        private set;
    }
}

Таким образом, если вы измените модель, вы не & & apos; необходимо заново создать файл XML, он немного чище из файла C #. FakeDataProvider - это статический класс, в котором хранятся все поддельные данные времени разработки. Так что в XAML единственное, что вам нужно сделать, это связатьListbox в коллекцию вашей ViewModel.

Ваш ответ на вопрос