Как получить данные DesignTime в WinRT XAML?

Как я могу получить данные DesignTime в WinRT XAML, чтобы дизайнер показывал образцы данных?

Ответ 1

Прост достаточно.

Создайте модель следующим образом:

public class Fruit 
{
    public string Name { get; set; }
}

Создайте базовый ViewModel следующим образом:

public class BaseViewModel 
{
    public ObservableCollection<Fruit> Fruits { get; set; }
}

Создайте настоящий ViewModel следующим образом:

public class RealViewModel : BaseViewModel
{
    public RealViewModel()
    {
        if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
            LoadData();
    }

    public void LoadData()
    {
        // TODO: load from service
    }
}

Создайте модель ViewModel поддельных данных следующим образом:

public class FakeViewModel : BaseViewModel
{
    public FakeViewModel()
    {
        this.Fruits = new ObservableCollection<Fruit>
        {
            new Fruit{ Name = "Blueberry"},
            new Fruit{ Name = "Apple"},
            new Fruit{ Name = "Banana"},
            new Fruit{ Name = "Orange"},
            new Fruit{ Name = "Strawberry"},
            new Fruit{ Name = "Mango"},
            new Fruit{ Name = "Kiwi"},
            new Fruit{ Name = "Rasberry"},
            new Fruit{ Name = "Blueberry"},
        };
    }
}

Сделайте это в своем XAML:

<Page.DataContext>
    <local:RealViewModel />
</Page.DataContext>

<d:Page.DataContext>
    <local:FakeViewModel />
</d:Page.DataContext>

Удачи!

PS: вы также можете попытаться использовать d: DesignData. Этот подход также работает. Я чувствую, что это не так прямо. В конце концов, это зависит от вас, как это сделать. В любом случае, не пропустите данные DeisgnTime!

Ответ 2

Вот пример d: DesignInstance:

Я также буду использовать класс Jerry Fruit, но я не буду использовать MVVM здесь, поскольку вам это не нужно, чтобы он работал.

В принципе, нам нужно создать класс модели данных (например, ViewModel или Model), который мы хотим иметь проектные данные (например, в этом случае я создаю дочерний класс, но вам не нужно).

public class Fruit
{
    public string Name { get; set; }
}

public class SampleFruit : Fruit
{
    public SampleFruit()
    {
        Name = "Orange (Sample)";
    }
}

Затем в нашем XAML мы можем использовать d: DataContext для привязки дочернего класса.

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"
      DataContext="{Binding}"
      d:DataContext="{Binding Source={d:DesignInstance Type=local:SampleFruit, IsDesignTimeCreatable=True}}">
    <TextBlock Text="{Binding Name}"
               HorizontalAlignment="Center" VerticalAlignment="Center"
               FontSize="42"/>
</Grid>

Обратите внимание на эту строку:

d:DataContext="{Binding Source={d:DesignInstance Type=local:SampleFruit, IsDesignTimeCreatable=True}}"

Теперь вы должны увидеть свои данные о времени разработки как для Visual Studio Designer, так и для Blend.

enter image description hereenter image description here

P.S. В Blend 2013 есть вкладка данных, которая позволяет создавать образцы данных.