Как я могу получить данные 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.
P.S. В Blend 2013 есть вкладка данных, которая позволяет создавать образцы данных.