wp7 데이터 귀속
25489 단어 데이터 바인딩
첫 번째 바인딩 방법: INotifyPropertyChanged 인터페이스 구현
1 public class Person:INotifyPropertyChanged
2 {
3 public event PropertyChangedEventHandler PropertyChanged;
4
5 private string name;
6 public string Name
7 {
8 get
9 {
10 return name;
11 }
12 set
13 {
14 name = value;
15 if (PropertyChanged != null)
16 {
17 PropertyChanged(this, new PropertyChangedEventArgs("Name"));
18 }
19 }
20 }
21 }
두 번째 귀속 방식:DependencyObject 인터페이스 구현(추천)--단축방법:propdp를 입력하고tab
1 public class Person : DependencyObject
2 {
3 // 、DependencyProperty 、 +Property= DependencyProperty.Register(" ",typeof( ),
4 // typeof( ),null);
5
6 public static DependencyProperty NameProperty = DependencyProperty.Register("Name",typeof(string),
7 typeof(Person),null);
8
9 public string Name
10 {
11 get
12 {
13 return (string)GetValue(NameProperty);
14 }
15 set
16 {
17 SetValue(NameProperty, value);
18 }
19 }
세 가지 바인딩 모드:
OneTime: 바인딩 생성 시 원본 데이터 업데이트 컨트롤을 사용합니다.(일반 set, get 속성일 수 있습니다.)
OneWay(기본값): 단방향 바인딩으로 바인딩을 만들 때 원본 데이터 업데이트 컨트롤을 사용하고 원본 데이터가 변할 때도 컨트롤을 업데이트합니다.INotify PropertyChanged 인터페이스를 구현하거나 Dependency Object에서 상속해야 합니다.Eval
TwoWay: 양방향 귀속, 데이터 원본의 변화는 컨트롤을 업데이트하고 컨트롤의 변화도 데이터 원본으로 업데이트합니다.INotify PropertyChanged 인터페이스를 구현하거나 Dependency Object에서 상속해야 합니다.Bind
덧셈 계산기:
클래스 정의:
1 public class jiafa:DependencyObject
2 {
3 public int sum1
4 {
5 get { return (int)GetValue(sum1Property); }
6 set { SetValue(sum1Property, value); }
7 }
8
9 // Using a DependencyProperty as the backing store for sum1. This enables animation, styling, binding, etc...
10 public static readonly DependencyProperty sum1Property =
11 DependencyProperty.Register("sum1", typeof(int), typeof(jiafa), null);
12 public int sum2
13 {
14 get { return (int)GetValue(sum2Property); }
15 set { SetValue(sum2Property, value); }
16 }
17 public static readonly DependencyProperty sum2Property = DependencyProperty.Register("sum2",typeof(int),typeof(jiafa),null);
18 }
19
20 public int result
21 {
22 get { return (int)GetValue(resultProperty); }
23 set { SetValue(resultProperty, value); }
24 }
25
26 // Using a DependencyProperty as the backing store for result. This enables animation, styling, binding, etc...
27 public static readonly DependencyProperty resultProperty =
28 DependencyProperty.Register("result", typeof(int), typeof(jiafa),null);
네임스페이스 가져오기
1 xmlns:ctrl="clr-namespace: 0819"
1 <phone:PhoneApplicationPage.Resources>
2 <ctrl:jiafa x:Key="jiafa"></ctrl:jiafa>
3 </phone:PhoneApplicationPage.Resources>
4 <!--LayoutRoot -->
5 <Grid x:Name="LayoutRoot" Background="Transparent" DataContext="{StaticResource jiafa}">
6 <TextBox Height="72" HorizontalAlignment="Left" Margin="12,127,0,0" Name="textBox1" Text="{Binding sum1,Mode=TwoWay}" VerticalAlignment="Top" Width="460" />
7 <TextBox Height="72" HorizontalAlignment="Left" Margin="20,271,0,0" Name="textBox2" Text="{Binding sum2}" VerticalAlignment="Top" Width="460" />
8 <Button Content=" " Height="72" HorizontalAlignment="Left" Margin="98,414,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click_1" />
9 <TextBlock Height="44" HorizontalAlignment="Left" Margin="54,517,0,0" Name="textBlock1" Text="{Binding result}" VerticalAlignment="Top" Width="280" />
10 </Grid>
백그라운드 코드
1 private void button1_Click_1(object sender, RoutedEventArgs e)
2 {
3 jiafa jf=(jiafa)this.Resources["jiafa"];
4 jf.result = jf.sum1 + jf.sum2;
5
6 }
데이터가 바인딩된 Converter:
이전에 계산기의 예에서 모델의 속성은 int 형식이지만 텍스트 상자의 Text 속성은string 형식이고 양방향으로 귀속할 수 있는 것은 값 변환기가 있기 때문이다.
그러나 우리가 데이터에서 꺼낸 값이 0과 1이면 각각 남자와 여자를 나타낸다.이때 시스템은 우리를 도와 복잡한 유형 전환을 할 수 없고 1을 남자로 만들어 사용자에게 보여줄 수 없다.
그래서 저희가 변환기를 하나 써야 돼요.
열거 정의:
1 Public enum Gender{ Female,Male,Unkown};
1 public class GenderStringConverter:IValueConverter
2 {
3 // :Model UI
4 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
5 {
6 //value Model
7 // UI
8 Gender gender = (Gender)value;
9 switch (gender)
10 {
11 case Gender.Female:
12 return " ";
13 case Gender.Male:
14 return " ";
15 case Gender.Unkown:
16 return " ";
17 default :
18 throw new Exception("Gender ");
19 }
20 }
21
22 // UI , UI Model
23 public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
24 {
25 string s = (string)value;
26 switch (s)
27 {
28 case " ":
29 return Gender.Male;
30 case " ":
31 return Gender.Female;
32 case " ":
33 return Gender.Unkown;
34 default :
35 //throw new Exception();
36 return Gender.Unkown;
37 }
38 }
39 }
변환기 사용법:
먼저 변환기가 필요한 페이지에 도입하기;
첫걸음
1 xmlns:my="clr-namespace:PhoneApp1"
두 번째 단계
1 <phone:PhoneApplicationPage.Resources>
2 <my:GenderStringConverter x:Key="genderStrConverter"></my:GenderStringConverter>
3
4 </phone:PhoneApplicationPage.Resources>
세 번째 단계
1 <TextBox Text="{Binding Gender,Mode=TwoWay,Converter={StaticResource genderStrConverter}}"></TextBox>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
wp7 데이터 귀속Silverlight의 데이터 귀속은 귀속된 대상에 특별한 요구가 있습니다. 만약에 일반적인 get, set 속성의 대상만 데이터 귀속에 사용하면 문제가 많습니다(양방향으로 귀속할 수 없습니다). 일반적인 요구 클래...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.