[解決済み] XAMLにおけるreadonlyプロパティからのOneWayToSourceバインディング
2023-04-01 17:31:31
質問
をバインドしようとしています。
Readonly
プロパティに
OneWayToSource
をモードとして使用することができますが、これはXAMLでは行えないようです。
<controls:FlagThingy IsModified="{Binding FlagIsModified,
ElementName=container,
Mode=OneWayToSource}" />
得ることができる。
プロパティ 'FlagThingy.IsModified' は、アクセス可能なセットアクセッサを持っていないため、設定できません。
IsModified
は読み出し専用の
DependencyProperty
で
FlagThingy
. その値を
FlagIsModified
プロパティにバインドしたい。
明確にするために
FlagThingy.IsModified --> container.FlagIsModified
------ READONLY ----- ----- READWRITE --------
XAMLだけで可能でしょうか?
更新しました。
さて、私はこのケースを、バインディングをコンテナに設定することで、解決しました。
FlagThingy
. しかし、私はまだこれが可能であるかどうかを知りたいです。
どのように解決するのですか?
OneWayToSourceに関するいくつかの調査結果...
オプション # 1.
// Control definition
public partial class FlagThingy : UserControl
{
public static readonly DependencyProperty IsModifiedProperty =
DependencyProperty.Register("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());
}
<controls:FlagThingy x:Name="_flagThingy" />
// Binding Code
Binding binding = new Binding();
binding.Path = new PropertyPath("FlagIsModified");
binding.ElementName = "container";
binding.Mode = BindingMode.OneWayToSource;
_flagThingy.SetBinding(FlagThingy.IsModifiedProperty, binding);
オプションその2
// Control definition
public partial class FlagThingy : UserControl
{
public static readonly DependencyProperty IsModifiedProperty =
DependencyProperty.Register("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());
public bool IsModified
{
get { return (bool)GetValue(IsModifiedProperty); }
set { throw new Exception("An attempt ot modify Read-Only property"); }
}
}
<controls:FlagThingy IsModified="{Binding Path=FlagIsModified,
ElementName=container, Mode=OneWayToSource}" />
オプション # 3 (真の読み取り専用依存性プロパティ)
System.ArgumentException: 'IsModified' プロパティをデータバインドすることはできません。
// Control definition
public partial class FlagThingy : UserControl
{
private static readonly DependencyPropertyKey IsModifiedKey =
DependencyProperty.RegisterReadOnly("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());
public static readonly DependencyProperty IsModifiedProperty =
IsModifiedKey.DependencyProperty;
}
<controls:FlagThingy x:Name="_flagThingy" />
// Binding Code
Same binding code...
Reflectorが答えを出します。
internal static BindingExpression CreateBindingExpression(DependencyObject d, DependencyProperty dp, Binding binding, BindingExpressionBase parent)
{
FrameworkPropertyMetadata fwMetaData = dp.GetMetadata(d.DependencyObjectType) as FrameworkPropertyMetadata;
if (((fwMetaData != null) && !fwMetaData.IsDataBindingAllowed) || dp.ReadOnly)
{
throw new ArgumentException(System.Windows.SR.Get(System.Windows.SRID.PropertyNotBindable, new object[] { dp.Name }), "dp");
}
....
関連
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み】WPFツリービューのSelectedItemへのデータバインディング
-
[解決済み】WPFコンボボックスのカスタムリストへのバインド
-
[解決済み] 静的プロパティへのバインディング
-
[解決済み] Prism for WPFとは?
-
[解決済み] 読み取り専用のGUIプロパティをViewModelにプッシュバックする
-
[解決済み] ConverterParameterに整数を渡すには?
-
[解決済み] WPFコマンドライン
-
[解決済み] ObservableCollectionのクリア時にe.OldItemsに項目がない場合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] wpf: ボタンがコマンドによって無効にされたとき、ツールチップを表示する方法は?
-
[解決済み] バインディングConverterParameter
-
[解決済み] WPFのキーボードショートカット
-
[解決済み] 読み取り専用のGUIプロパティをViewModelにプッシュバックする
-
[解決済み] WPF ListViewの選択範囲オフ
-
[解決済み] ConverterParameterに整数を渡すには?
-
[解決済み] WPF: 画像を元の大きさで表示するには?
-
[解決済み] WPF バインディング StringFormat Short Date String
-
[解決済み] WPFのStringFormatによるバインディングがToolTipで機能しない件
-
[解決済み] WPF: ダイアログ/プロンプトの作成