Tworzymy stronę www w ASP.NET cz.1,5 - interfejs Silverlight (Akt 3)
Akt trzeci. Akt pierwszy znajdziecie tu: klik!, a drugi tu: klik!.
Kod źródłowy w całości znajduje się na końcu wpisu.
Aby wszystko zadziałało musimy jeszcze zbindować Właściwości ViewModelu z kontrolkami widoku. W polach tekstowych bindujemy właściwość Text:
<TextBox Grid.Row="2" Grid.Column="2" Text="{Binding Path=RokWydania, Mode=TwoWay}" />
<TextBox Grid.Row="2" Grid.Column="6" Text="{Binding Path=Wydawnictwo, Mode=TwoWay}" />
<TextBox Grid.Row="2" Grid.Column="10" Text="{Binding Path=Opis, Mode=TwoWay}" />
Natomiast w ComboBox bindujemy ItemsSource jako źródło kolekcji danych, a SelectedItem jako aktualnie wybrany element. Dodatkowo musimy wskazać, jaka właściwość na być użyta do wyświetlenia opisu. Robimy to poprzez właściwość DisplayMemberPath.
<ComboBox Grid.Row="0" Grid.Column="2" ItemsSource="{Binding Path=Gatunki}"
SelectedItem="{Binding Path=Gatunek, Mode=TwoWay}" DisplayMemberPath="Text">
<ComboBox.Resources>
<Style TargetType="ComboBoxItem">
<Setter Property="Height" Value="24"></Setter>
</Style>
</ComboBox.Resources>
</ComboBox>
<TextBlock Grid.Row="0" Grid.Column="4" Text="Autor" VerticalAlignment="Center" />
<ComboBox Grid.Row="0" Grid.Column="6" ItemsSource="{Binding Path=Autorzy}"
SelectedItem="{Binding Path=Autor, Mode=TwoWay}" DisplayMemberPath="Text">
<ComboBox.Resources>
<Style TargetType="ComboBoxItem">
<Setter Property="Height" Value="24"></Setter>
</Style>
</ComboBox.Resources>
</ComboBox>
W przycisku wyszukiwania dokładamy właściwość Command
Na koniec podpinamy grid. Podobnie jak w combo, kolekcję wyników przypinamy do właściwości ItemsSource. Poza tym każdą kolumnę grida musimy powiązać z odpowiednią nazwą właściwości obiektu wyników wyszukiwania.
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Tytuł" Width="*" Binding="{Binding Path=Tytul}" />
<sdk:DataGridTextColumn Header="Autor" Width="*" Binding="{Binding Path=Autor}" />
<sdk:DataGridTextColumn Header="Gatunek" Width="*" Binding="{Binding Path=Gatunek}" />
<sdk:DataGridTextColumn Header="Rok wydania" Width="Auto" Binding="{Binding Path=RokWydania}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
I to wszystko. Odpalamy i oczywiście nie działa Co zrobiliśmy źle? No tak, w xaml nie przypisaliśmy ViewModelu do DataContext. Dokładamy do UserControl
Druga próba i działa wszystko jak należy.
Wcześniej we wpisie zauważyłem, że konieczne będzie dodanie atrybutów do klas DTO. Jak widać, wszystko poszło bez problemów, dziwne nazwy się nie wygenerowały. Cóż, mniej roboty W sumie nie wiem dlaczego - być może magia .NET 4.0 i SL5.
Przy okazji znalazłem błąd w klasie BooksSearchDataManager ? padłem ofiarą metody Kopiego-Pejsta i kolejne kryteria źle się sprawdzały. Poprawka jest w źródłach.
Kod źródłowy do pobrania: KsiegarniaCDA___cz1_5.zip
Dzięki wszystkim, którzy wyrwali do końca Zapraszam do komentowania!
Do następnego wpisu!
4 komentarze
Rekomendowane komentarze