Использование DataBinding и DataTemplate при помощи Expression Blend в Silverlight - Количество авторов

ОГЛАВЛЕНИЕ

Количество авторов

Мы быстро рассмотрим два свойства. В первой строке подсказка была создана в StackPanel

<StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Right" VerticalAlignment="Bottom">
        
<TextBlock x:Name="NumAuthorsPrompt" Text="{Binding NumAuthors, Mode=OneWay}"
VerticalAlignment="Bottom" HorizontalAlignment="Right" FontFamily="Verdana"
FontSize="18" FontWeight="Medium" Margin="0,0,15,15"/>
        
<TextBlock x:Name="AuthorsPrompt" Text="Authors"
VerticalAlignment="Bottom" HorizontalAlignment="Right" FontFamily="Verdana"
FontSize="18" FontWeight="Medium" Margin="0,0,15,15"/>

</StackPanel> 

Первый элемент TextBlock привязан к мистическому свойству NumAuthors. Мы знаем, что все эти привязки осуществляются к объекту Book. Так содержит ли класс Book свойство NumAuthors, которое указывает количество авторов, написавших книгу? Исследовав Book можно заметить, что это было инкапсулировано в классе Book (там, где и положено):

public string NumAuthors
{
   get
   {
    return privateAuthors.Count.ToString();
   }

Наконец-то элемент управления ползунком инициализирован с рейтингом из книги (обратите внимание на привязку), но позволяет пользователю установить любое значение от 0 до 5, и данное значение посылается назад в бизнес-объект. Это реализуется при помощи двусторонней привязки,

<Slider x:Name="RatingSlider" Width="150" VerticalAlignment="Bottom"
   HorizontalAlignment="Left" Margin="5,0,5,0" LargeChange="1.0" SmallChange="0.1" Minimum="0" Maximum="5.0"
   ValueChanged="RatingSlider_ValueChanged" Value="{Binding Rating, Mode=TwoWay}" />

Поскольку ползунок не отображает какое-либо значение, мы добавили TtextBlock, который будет выводить значение ползунка
<StackPanel Grid.Row="5" Margin="0,0,0,15"  Grid.Column="1" Orientation="Horizontal" >
   
 <Slider x:Name="RatingSlider" Width="150" VerticalAlignment="Bottom"
   HorizontalAlignment="Left" Margin="5,0,5,0" LargeChange="1.0" SmallChange="0.1" Minimum="0" Maximum="5.0"
   ValueChanged="RatingSlider_ValueChanged" Value="{Binding Rating, Mode=TwoWay }" />
   
<TextBlock x:Name="SliderValueDisplay" Margin="5,0,0,0"
VerticalAlignment="Bottom"
HorizontalAlignment="Left" FontFamily="Verdana" FontSize="18"
/>
   
</StackPanel>

Обратите внимание на то, что TextBlock не привязан к значению ползунка. Вместо этого он обновляется в результате реализации события ValueChanged ползунка, тем самым гарантируется его своевременное обновление при изменении позиции ползунка, что обогащает функциональность,

private void RatingSlider_ValueChanged(
   object sender,
    System.Windows.RoutedPropertyChangedEventArgs e)
{
    Slider s = sender as Slider;
    SliderValueDisplay.Text = s.Value.ToString("N");

Вкратце, мы должны преобразовать отправляемое (которое является объектом типа) в тип ползунка (Slider), тем самым мы сможем получить доступ к значению его свойства, которое мы впоследствии обрабатываем в качестве строки, вызывая ToString. При этом передается стандартная форматирующая строка "N", которая заставляет передаваемую строку обрабатываться с двумя цифрами после запятой, чтобы у нас книга не имела рейтинг, равный 4.7383928.

Скачать исходники примеров 

Jesse Liberty
Источник