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

回答編集履歴

3

追記しました

2018/10/01 09:55

投稿

gaya-K
gaya-K

スコア449

answer CHANGED
@@ -16,4 +16,41 @@
16
16
 
17
17
  Hoge と Thickness の違だけ先に回答します。
18
18
  Thickness は IEquatable<T> を実装していて、等値比較ができるようになっています。
19
- これにより値の変化を検知しているのだと思います。
19
+ これにより値の変化を検知しているのだと思います。
20
+
21
+ ## 追記3
22
+
23
+ > "B"のコントロール領域内でマウスダウンをするとこのコントロールのFooとPaddingに値が代入されてしまうので以降"A"でマウスダウンをしても反映されなくなってしまいます。これはバグ?仕様?わかりません・・・。
24
+
25
+ 明確なソースが見つからないですが、仕様だと思います。
26
+ 代入時点でバインドが消失するのでしょう。
27
+
28
+ ちなみに私なら極力コードビハインドを使わずこんな風に書きます。
29
+ (Foo は VM のプロパティにします。)
30
+
31
+ ```cs
32
+ public class Hoge : INotifyPropertyChanged
33
+ {
34
+ // イベント省略
35
+ public int X {get; private set;}
36
+ public int Y {get; private set;}
37
+ public void Set(int x, int y)
38
+ {
39
+ X=x;
40
+ Y=y;
41
+ }
42
+ }
43
+ ```
44
+
45
+ ```xml
46
+ <Style TargetType="TextBox">
47
+ <Setter Property="Text">
48
+ <Setter.Value>
49
+ <MultiBinding StringFormat="{}X: {0}, Y: {1}">
50
+ <Binding Path="Foo.X"/>
51
+ <Binding Path="Foo.Y"/>
52
+ </MultiBinding>
53
+ </Setter.Value>
54
+ </Setter>
55
+ </Style>
56
+ ```

2

追記しました

2018/10/01 09:55

投稿

gaya-K
gaya-K

スコア449

answer CHANGED
@@ -3,12 +3,17 @@
3
3
 
4
4
  ##追記
5
5
 
6
- INotifyPropertyChanged にピンとこないのであれば、WPF で非常に重要な知識が身についてないことになります。
6
+ ~~INotifyPropertyChanged にピンとこないのであれば、WPF で非常に重要な知識が身についてないことになります。
7
7
  これをなくしてデータバインドは語れませんし、WPF の魅力を発揮できません。
8
+ まずは以下のリンクで同じように悩んだ方の記事を読んでみてください。コメント欄に解説もあります。~~
8
9
 
9
- まずは以下のリンクで同じように悩んだ方の記事を読んでみてください。コメント欄に解説もあります。
10
-
11
10
  [wpfのBindingでハマり](https://qiita.com/StaticProgramer/items/2fe828a2829cefd260d4#_reference-23b3925d94ec09b1c8d9)
12
11
 
13
- 提示されたコードではわざわざカスタムコントロールを作る必要がありません。
12
+ ~~提示されたコードではわざわざカスタムコントロールを作る必要がありません。
14
- なので、まずはデータバインドの仕組みや MVVM パターンの記事をいろいろ漁って読んでみてください。
13
+ なので、まずはデータバインドの仕組みや MVVM パターンの記事をいろいろ漁って読んでみてください。~~
14
+
15
+ ## 追記2
16
+
17
+ Hoge と Thickness の違だけ先に回答します。
18
+ Thickness は IEquatable<T> を実装していて、等値比較ができるようになっています。
19
+ これにより値の変化を検知しているのだと思います。

1

追記しました

2018/09/28 03:52

投稿

gaya-K
gaya-K

スコア449

answer CHANGED
@@ -1,2 +1,14 @@
1
1
  Foo に INotifyPropertyChanged を実装するか、Foo に Freezable or DispatcherObject を継承させればいいかと。
2
- xaml から使う分にはそれで十分ですが、コードビハインドで使うにはイベントハンドラの購読が必要です。
2
+ xaml から使う分にはそれで十分ですが、コードビハインドで使うにはイベントハンドラの購読が必要です。
3
+
4
+ ##追記
5
+
6
+ INotifyPropertyChanged にピンとこないのであれば、WPF で非常に重要な知識が身についてないことになります。
7
+ これをなくしてデータバインドは語れませんし、WPF の魅力を発揮できません。
8
+
9
+ まずは以下のリンクで同じように悩んだ方の記事を読んでみてください。コメント欄に解説もあります。
10
+
11
+ [wpfのBindingでハマり](https://qiita.com/StaticProgramer/items/2fe828a2829cefd260d4#_reference-23b3925d94ec09b1c8d9)
12
+
13
+ 提示されたコードではわざわざカスタムコントロールを作る必要がありません。
14
+ なので、まずはデータバインドの仕組みや MVVM パターンの記事をいろいろ漁って読んでみてください。