Xaml – Private setなのにTwoWay Bindingができる(C# WPF)

C#
public ReactiveProperty<bool> IsSelected { get; private set; } 

にしたプロパティがXamlにTwoWayでBindできてしまった。

<CheckBox IsChecked="{Binding IsSelected.Value, Mode=TwoWay}" />

挙句にチェックボックスのon, offでsetterも普通に動く始末。
これ不味いんじゃないか?
というかSetterを取っ払っても動くんだけど?

public ReactiveProperty<bool> IsSelected { get; } 

xamlにBindする時は基本的にSetterを付けているので問題にはならなそうだけど、挙動が怪しい。

.NET 4.5 をターゲットにした時のみ、private setter プロパティに TwoWay Binding できる謎 – CAT EARS

こんな記事を見つけた。
.NET4.5をターゲットにした時のみこういう挙動と書かれている。

でも私のターゲットはv4.7.2なのよね。

<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>

とりあえずは問題にならないのでスルーするけど、気になる。

C#
スポンサーリンク
Once and Only

コメント

  1. a@a.a says:

    当たり前では?
    ・プロパティのsetterはReactivePropertyのインスタンスそのものの書き換え可否を制御する(private setにするのはコンストラクタ以外のメソッドで初期化したいとき用)
    ・上書き不能ならReadOnlyReactivePropertyにする