Использование 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
Источник