Разработка шаблонов данных для WPF - PullRequest
4 голосов
/ 16 июня 2009

Используя WPF, XAML, VS2008 и Blend 2 (или предпочтительно 3-бета), каков ваш процесс создания шаблонов данных? Есть ли у вас процесс тестирования внешнего вида шаблона данных, БЕЗ раскручивания приложения, просто чтобы проверить, как выглядят данные? Есть ли какой-нибудь процесс, который я могу использовать в Blend, чтобы сделать разработку шаблонов данных более графической?

Ответы [ 2 ]

6 голосов
/ 16 июня 2009

Вы можете указать данные во время разработки через Blend или (чтобы они работали и в VS) сделать это:

  • Создайте подкласс объекта, который вы указали в качестве DataContext.
  • В конструкторе этого подкласса установите свойства для некоторых тестовых значений.
  • Объявление экземпляра подкласса как ресурса.
  • Установите DataContext для этого ресурса.
  • Не забудьте очистить или установить для DataContext что-то разумное во время выполнения, в противном случае пользователи увидят ваши данные времени разработки.

Работает и в Silverlight.

Вот пример кода:

// The object (in a list) that'll be bound as our ListBox ItemsSource
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

// Our design-time data. Note that we add list items in the constructor
public class PersonDesignTimeData : ObservableCollection<Person>
{
    public PersonDesignTimeData()
    {
        this.Add(new Person { FirstName = "Fred", LastName = "Smith" });
        this.Add(new Person { FirstName = "Jim", LastName = "Brown" });
        this.Add(new Person { FirstName = "Dave", LastName = "Jones" });
    }
}

Window1.xaml:

<Window x:Class="DesignTimeDataDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:DesignTimeDataDemo"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <local:PersonDesignTimeData x:Key="PersonDesignTimeData"/>
    </Window.Resources>
    <Grid x:Name="root" DataContext="{StaticResource PersonDesignTimeData}">
        <ListBox
            ItemsSource="{Binding}"
            >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Width="200">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="2*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Column="0" Text="{Binding FirstName}"/>
                        <TextBlock Grid.Column="1" Text="{Binding LastName}"/>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

    </Grid>
</Window>
2 голосов
/ 01 августа 2012

Я бы не использовал вышеупомянутое решение для данных времени проектирования. Используйте библиотеки blend designtime, они работают в visual studio и легко доступны в SDK. Описанный выше способ потребляет память во время выполнения для экземпляра ресурса, это только создает экземпляр класса во время разработки.

Используя приведенный выше пример в качестве основы, вы сделаете то же самое, что и предыдущий ответ, но сделаете ссылку на него в xaml следующим образом:

<Window x:Class="DesignTimeDataDemo.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DesignTimeDataDemo"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
mc:Ignorable="d"
xmlns:DesignInstances="clr-namespace:Mrwa.Mmis.Field.Client.Feature.Defect.ViewModel"
d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True, Type=DesignInstances:PersonDesignTimeCreatable}"

Title="Window1" Height="300" Width="300">
<Grid x:Name="root" >
    <ListBox
        ItemsSource="{Binding}"
        >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Width="200">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="2*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Text="{Binding FirstName}"/>
                    <TextBlock Grid.Column="1" Text="{Binding LastName}"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

</Grid>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...