Читайте также: |
|
Данная поддержка состоит в расширении перечислимого типа UpdateSourceTrigger значением PropertyChanged. Данное значение влияет на обновление источника данных, происходящее при обновлении цели (элемента, куда данные выгружаются). Ранее этот тип поддерживал лишь два значения, это LostFocus и Explicit. Иными словами, если Вы связываете данные с элементом управления TextBox, то в случае двунаправленного связывания, при изменении элемента TextBox, источник мог быть обновлен лишь при потере фокуса или явным образом. Значение PropertyChanged позволяет реагировать на любые изменения в текстовом поле «на лету». При этом нет необходимости обрабатывать нажатия клавиш и т.д. Вот пример кода:
1: <UserControl x:Class="SilverlightApplication1.MainPage"
2: xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
3: xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
4: xmlns:d=http://schemas.microsoft.com/expression/blend/2008
5: xmlns:mc=http://schemas.openxmlformats.org/markup-ompatibility/2006
6: Loaded="UserControl_Loaded"
7: mc:Ignorable="d"
8: d:DesignHeight="300" d:DesignWidth="400">
9:
10: <Grid x:Name="LayoutRoot" Background="White">
11: <Grid.Resources>
12: <Style TargetType="TextBox">
13: <Setter Property="Background" Value="AliceBlue"/>
14: <Setter Property="Width" Value="200"/>
15: <Setter Property="Margin" Value="5"/>
16: </Style>
17: <Style TargetType="TextBlock">
18: <Setter Property="Margin" Value="5"/>
19: </Style>
20: </Grid.Resources>
21: <Grid.RowDefinitions>
22: <RowDefinition Height="Auto"></RowDefinition>
23: <RowDefinition Height="Auto"></RowDefinition>
24: </Grid.RowDefinitions>
25: <Grid.ColumnDefinitions>
26: <ColumnDefinition Width="Auto"></ColumnDefinition>
27: <ColumnDefinition Width="Auto"></ColumnDefinition>
28: </Grid.ColumnDefinitions>
29:
30: <TextBlock Text="First Name:" Grid.Column="0" Grid.Row="0"/>
31: <TextBox Grid.Row="0" Grid.Column="1" Text=
32: "{Binding FirstName, UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}">
33: </TextBox>
34: <TextBlock Text="Your First Name:" Grid.Column="0"
Grid.Row="1"/>
35: <TextBlock Text="{Binding FirstName}" Grid.Column="1"
Grid.Row="1"/ >
36:
37: </Grid>
38: </UserControl>
Ну и код модифицированного класса (чтобы работало связывание в двух направлениях):
1: public class Person: INotifyPropertyChanged
2: {
3: public string firstName;
4:
5: public string FirstName {
6: get { return firstName; }
7: set {
8: firstName = value;
9: OnPropertyChanged(new
PropertyChangedEventArgs("FirstName"));
10: }
11: }
12:
13: public event PropertyChangedEventHandler PropertyChanged;
14:
15: public void OnPropertyChanged(PropertyChangedEventArgs e)
16: {
17: if (PropertyChanged!= null)
18: PropertyChanged(this, e);
19: }
20:
21: }
В результате, если вводить текст в поле редактирования, он тут же будет отображаться и в поле ниже. Это не всегда хорошо, так как если текст проходит валидацию, то в процессе набора нет необходимости требовать его корректность, но иногда такая возможность может быть полезна.
Дата добавления: 2015-08-13; просмотров: 62 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Отладка при связывании с данными | | | Неявные шаблоны |