2009-06-15 4 views
4

WPF, XAML, VS2008 및 Blend 2 (또는 3 Beta 기본 설정)를 사용하여 데이터 템플릿을 만드는 프로세스는 무엇입니까? 데이터의 모양을 테스트하기 위해 앱을 회전시키지 않고 데이터 템플릿의 모양을 테스트하는 프로세스가 있습니까? Blend에서 데이터 템플릿을보다 그래픽으로 개발할 수있는 프로세스가 있습니까?WPF 용 데이터 템플릿 디자인

답변

6

당신은 혼합을 통해 디자인 타임에 데이터를 지정하거나 (그것뿐만 아니라 VS에서 작업 얻을) 이렇게 :

  • 당신이 당신의 DataContext로 설정 한 객체의 하위 클래스를 만듭니다.
  • 이 하위 클래스의 생성자에서 속성을 일부 테스트 값으로 설정합니다.
  • 서브 클래스의 인스턴스를 자원으로 선언하십시오.
  • DataContext를이 리소스로 설정합니다.
  • 런타임시 DataContext를 적절한 것으로 설정해야합니다. 그렇지 않으면 사용자에게 디자인 타임 데이터가 표시됩니다.

실버 라이트에서도 작동합니다.

// 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

내가 디자인 타임 데이터에 대한 위의 솔루션을 사용하지 않을

는 여기에 몇 가지 예제 코드입니다. 혼합 디자인 라이브러리를 사용하면 Visual Studio에서 작동하며 SDK에서 쉽게 사용할 수 있습니다. 위에서 설명한 방법은 리소스 인스턴스에 대한 런타임에 메모리를 소비하므로 설계시에만 클래스를 인스턴스화합니다.

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

: 이전 답변으로 동일한 작업을 수행하지만,이 같은 XAML에서 그것을 참조 할 것 도심 위의 예를 사용하여