Skocz do zawartości

wiesniak@Blog.FA

  • wpisy
    12
  • komentarzy
    134
  • wyświetleń
    40065

Tworzymy stronę www w ASP.NET cz.1,5 - interfejs Silverlight (Akt 3)


wies.niak

1252 wyświetleń

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:

CODE
<TextBox Grid.Row="0" Grid.Column="10" Text="{Binding Path=Tytul, Mode=TwoWay}" />

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

CODE
<TextBlock Grid.Row="0" Grid.Column="0" Text="Gatunek" VerticalAlignment="Center" />

<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

CODE
Command="{Binding Path=SearchCommand}"

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.

CODE
<sdk:DataGrid Grid.Row="3" AutoGenerateColumns="False" ItemsSource="{Binding Path=SearchResults}">

<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

CODE
DataContext="{Binding Path=BooksSearch, Source={StaticResource Locator}}"

Druga próba i działa wszystko jak należy.

blogentry-7427-1331519872.png

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

Wszystko zależy od Waszych życzeń i moich ograniczeń wiedzowo-czasowych.

Moje pomysły to na chwilę obecną rozwój strony w asp.net - rozwój w sensie budowy architektury aplikacji (detale zachowam dla siebie, póki co:P). Poza tym mam parę pomysłów dotyczących użytkowania Visual Studio.

Link do komentarza
Gość
Dodaj komentarz...

×   Wklejony jako tekst z formatowaniem.   Wklej jako zwykły tekst

  Maksymalna ilość emotikon wynosi 75.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...