2011-10-13 10 views
12

To może być głupie pytanie, ale czy możliwe jest zdefiniowanie niektórych przykładowych danych jako DataContext, aby zobaczyć mój DataTemplate w DesignView?Czas projektowania danych dla datamiplate w xaml

W tej chwili zawsze muszę uruchomić moją aplikację, aby sprawdzić, czy moje zmiany działają.

E.g. z kodem następujące DesignView tylko pokazuje puste pole listy:

<ListBox x:Name="standardLayoutListBox" ItemsSource="{Binding myListboxItems}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <Label Grid.Column="0" Content="{Binding text1}" /> 
       <Label Grid.Column="1" Content="{Binding text2}" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

proszę zobaczyć rozwiązań przedstawionych w tym poście: http://stackoverflow.com/questions/1889966/what-approaches-are-available-to-dummy- design-time-data-in-wpf –

+0

Do tej pory przeczytałem wiele próbek, ale naprawdę nie jestem w stanie uzyskać tego prostego listboxu, który zostałby wypełniony w czasie projektowania. Jestem pewna, że ​​czegoś mi brakuje, ale nie mogę się dowiedzieć co. Czy możliwe jest dostarczenie działającej próbki dla mojego listbox? – MTR

+0

Zobacz poniżej moją odpowiedź na przykładowy kod. –

Odpowiedz

15
public class MyMockClass 
{ 
    public MyMockClass() 
    { 
     MyListBoxItems.Add(new MyDataClass() { text1 = "test text 1", text2 = "test text 2" }); 
     MyListBoxItems.Add(new MyDataClass() { text1 = "test text 3", text2 = "test text 4" }); 
    } 
    public ObservableCollection<MyDataClass> MyListBoxItems { get; set; } 
} 

public class MyDataClass 
{ 
    public string text1 { get; set; } 
    public string text2 { get; set; } 
} 

In Your XAML

Dodaj deklarację przestrzeni nazw

xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

Dodaj mock kontekstu danych do okna/środków kontrolnych

<UserControl.Resources> 
    <local:MyMockClass x:Key="DesignViewModel"/> 
</UserControl.Resources> 

Następnie zmodyfikować ListBox do odniesienia do obiektu czasie projektowania

<ListBox x:Name="standardLayoutListBox" 
d:DataContext="{Binding Source={StaticResource DesignViewModel}}" 
ItemsSource="{Binding MyListBoxItems}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <Label Grid.Column="0" Content="{Binding text1}" /> 
       <Label Grid.Column="1" Content="{Binding text2}" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+3

Po dodaniu myListBoxItems = new ObservableCollection (); do konstruktora MyMockClass nie ma komunikatu o błędzie, ale Listbox jest pusty. – MTR

+0

Nie widzę żadnych innych problemów. bardzo poważnie podchodzę do danych dotyczących czasu projektowania, polecam zajrzeć do pojęć MEF. Używam [Cinch] (http://www.codeproject.com/KB/WPF/CinchV2_3.aspx) (Szukaj "DesignModel Design" na zobacz wsparcie dla czasu projektowania) Przepraszamy, nie mogę pomóc w prostszym rozwiązaniu –

+1

Nie zapomnij ustawić mc: Ignorable w deklaracjach przestrzeni nazw: xmlns: mc = "http://schemas.openxmlformats.org/ zgodność znaczników/2006 " mc: Ignorable = "d" –

Powiązane problemy