teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

大文字小文字

2017/09/18 22:32

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  DataContextを毎回入れ替えるのではなく、DataContext内の各プロパティを変更時に、変更通知を行うことでバインドしたUIは更新されます。
4
4
 
5
+ INotifyPropertyChangedを実装したインスタンスをDataContextとすることで、どのプロパティが変更したかをUIへ通知できます。
6
+
5
7
  ```csharp
6
8
  public partial class MainWindow : Window
7
9
  {
@@ -9,7 +11,7 @@
9
11
  {
10
12
  InitializeComponent();
11
13
  //this.DataContext = new { labelA = "A", labelB = "B" };
12
- _viewModel = new MainWindowViewModel { LabelA = "A", LabelB = "B" };
14
+ _viewModel = new MainWindowViewModel { labelA = "A", labelB = "B" };
13
15
  this.DataContext = _viewModel;
14
16
  }
15
17
 
@@ -18,37 +20,37 @@
18
20
  private void btn1_Click(object sender, RoutedEventArgs e)
19
21
  {
20
22
  //this.DataContext = new { labelA = "A+", labelB = "B+" };
21
- _viewModel.LabelA = "A+";
23
+ _viewModel.labelA = "A+";
22
- _viewModel.LabelB = "B+";
24
+ _viewModel.labelB = "B+";
23
25
  }
24
26
 
25
27
  private void btn2_Click(object sender, RoutedEventArgs e)
26
28
  {
27
29
  //this.DataContext = new { labelA = "A++" };
28
- _viewModel.LabelA = "A++";
30
+ _viewModel.labelA = "A++";
29
31
  }
30
32
  }
31
33
 
32
34
  public class MainWindowViewModel : INotifyPropertyChanged
33
35
  {
34
36
  private string _labelA;
35
- public string LabelA
37
+ public string labelA
36
38
  {
37
39
  get { return _labelA; }
38
40
  set {
39
41
  _labelA = value;
40
- OnPropertyChanged("LabelA");
42
+ OnPropertyChanged("labelA");
41
43
  }
42
44
  }
43
45
 
44
46
  private string _labelB;
45
- public string LabelB
47
+ public string labelB
46
48
  {
47
49
  get { return _labelB; }
48
50
  set {
49
51
 
50
52
  _labelB = value;
51
- OnPropertyChanged("LabelB");
53
+ OnPropertyChanged("labelB");
52
54
  }
53
55
  }
54
56
 
@@ -58,4 +60,4 @@
58
60
  this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
59
61
  }
60
62
  }
61
- ```
63
+ ```