問題タブ [relativesource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 子ユーザー コントロールから ElementName へのバインド
レイアウトのシリアル化のために、GridControl の CommandParameter を渡す必要があります。
コマンドを実行するためのボタンは子ユーザーコントロールにあります。
RelativeSource を使用して、GridControl を含む Grid にアクセスしています。
編集: このボタンは、GridSettings.xaml という名前のユーザー コントロールにあります。これは Grid.xaml の子です。
Grid.xaml 親ビューの関連セクションを次に示します。
エラー: System.Windows.Data エラー: 40: BindingExpression パス エラー: 'gridControl1' プロパティが 'object' ''Grid' (Name='GridView')' に見つかりません。BindingExpression:Path=gridControl1; DataItem='Grid' (Name='GridView'); ターゲット要素は 'ボタン' (Name=''); ターゲット プロパティは 'CommandParameter' (タイプ 'Object') です。
Path=gridControl1 は実際には ElementName=gridControl1 である必要があります...しかし、ElementName は RelativeSource では機能しません...だから私は読みました。
wpf - WPF - スタイルの RelativeSource
私の目標は、 LabelのContent -Property を、 Style が適用される Elements のTag -Propertyにバインドすることです。しかし、私の解決策はうまくいかないようです:
私のスタイル:
私のテキストボックス:
c# - コンストラクターで DataContext=this を設定することと、WPF で {RelativeSource Self} にバインドすることの違いは?
次のコードは期待どおりに機能します。
AskWindow.xaml:
AskWindow.xaml.cs:
しかしDataContext='{Binding RelativeSource={RelativeSource Self}}'
、Window タグとコメント行で設定するDataContext=this
と、空のウィンドウが表示されます。なんで?
AskWindow.xaml:
AskWindow.xaml.cs:
wpf - 複数のコンテンツ、親が null
2 つのコンテンツ エリアをホストする UserControl を実装しようとしています。1 つはボタン領域用、もう 1 つは一般的なコンテンツ領域用です。ただし、それを使用しようとすると、追加の ButtonArea に親が設定されていないため、RelativeSource ルックアップが失敗します。この問題は、コントロールがポップアップで使用されている場合にのみ発生し、ポップアップで使用されていない場合はすべて正常に機能します。
そして、これは UserControl のコントロール テンプレートです。
バインディング ログは次のとおりです。
ご覧のとおり、ルックアップは通常のコンテンツでは機能しますが、追加のボタン エリア コンテンツでは失敗します。たとえば、ポップアップの代わりにキャンバスを使用し、キャンバスにプロパティを設定しようとすると機能します。デバッグすると、VisualTreeHelper.GetParent がグリッドに対して null を返すことがわかります。ポップアップが使用されているときにこれが失敗する理由を知っている人はいますか?
c# - WPF同じビューモデルから他の変数にアクセスする方法は?
アイテムを表示するにTelerik:RadGridView
は、通常、 と を使用DataContext="{Binding [someViewModel]}"
しItemSource="{Binding objectList, Mode=TwoWay}"
ます。
私のコラムでは、にアクセスしobjectfield
ます。全体像は以下のようになります。
に 10 個のアイテムがあると想像してくださいobjectList
。の各項目には、チェックボックス プロパティを操作するためobjectList
の変数があります。isChecked
IsChecked
enabledVar
同じビューモデルに、10 個のチェックボックス プロパティを制御する別の変数がありIsEnabled
ます。enabledVar
の一部ではありobjectList
ませんが、値を取得できませんでした。このような場合の対処法を教えてください。
アップデート:
私はいくつかの新しい方向性を見つけましたが、それが役立つかどうかはわかりません.
もちろん、それでも失敗しました。
どんな助けでも大歓迎です。
c# - Ancestor と Self である相対ソースとバインドする方法は?
次のコードがあります。
MyDictionary - キーが enum 型のディクショナリです。このバインドは、SecDic と ThirdDic をディクショナリから BitmapImages に変更すると機能します。しかし、MyDictionary のキー (enum) ごとに、異なる True/False イメージが存在するようにしたいと考えています。だから私は書いてみました:
しかし、「キー」は (MyDictionary の) 画像のデータ コンテキストに属しており、相対ソースをアイテム コントロールに変更したため、「キー」が存在しないため、機能しません。助言がありますか?
c# - 依存関係プロパティに RelativeSource バインディングがある場合、GetTemplateChild は null を返します。
MyTextBox
から継承するカスタム コントロール を作成しましたTextBox
。名前付きコントロールを含むスタイルが関連付けられています。
MyTextBox
には依存関係プロパティがあり、設定すると、その値が次のように伝播されますSomeControl
。
これは、次のように単純なバインディングを行う場合にうまく機能します。
しかし、次のように、RelativeSource を使用してより高度なバインディングを使用すると、次のようになります。
メソッドは をme.GetTemplateChild()
返しますnull
。つまり、SomeControl
見つからない。
なんで?
私が行った観察の 1 つは、 がある場合RelativeSource
、MyParameter
依存関係プロパティがすべての依存関係プロパティの最初に設定されるということです。つまり、次のようなことをすると:
MyParameter
プロパティは (奇妙なことに) の前に設定されていOtherParameter
ます。単純なバインディングを使用すると、予想どおり、宣言されたのと同じ順序で設定されます。
(ご覧のとおり、私のコードは無関係なものから取り除かれています。うまくいけば、重要なものはすべて含まれています。)