する質問をすることでしか得られない、回答やアドバイスがある。14WPFでコントロールを別クラスとバインディングする方法C#/WPFにて、コントロールと別のクラスを上手くバインディングすることが出来ず困っています。ViewModelから、コントロール(Button)に対応した別のクラスを経由して、画面に値を設定したいと思っています。画面に反映することができないため質問します。2ファイルは変更しないことを前提とさせてください。書いているのは間違えているわけではありません。XAMLでは、ButtonにはDataContextのみを指定し、Contentは指定しないこととします。最終的にはこれを発展させ、Buttonを継承したMyButtonを画面に設置、MyButtonとButtonDataをViewModelを経由してBindingする、という形を取ることになります。構成プロジェクトの構成(主なもの)は以下の通りです。DataContextにViewModelを指定します。}MainWindow.xaml画面にはボタンを一つだけ設置します。Btn1のDataContextには、ViewModelの"Btn1"というプロパティをバインドします。</Grid></Window>ButtonData.csButtonDataは、コントロールのButtonクラスに対応するクラスです。ViewModelからはButtonクラスではなく、このButtonDataクラスのContentプロパティに値をセットすることで、画面に文字を反映しようとします。}ViewModel.cs最後にViewModelクラスです。ViewModelには、MainWindow.xamlに設置したボタン"Btn1"に対応するプロパティ"Btn1"を用意します。ViewModel上で、Btn1.Contentに値をセットすると、これが画面に反映されることを想定しています。上記のようにコードを作成しました。想定では、画面に表示されるボタンに"hello"と表示されるはずでしたが、何も表示されません。ボタンには何も表示されないのでしょうか。(ここではButtonDataやViewModelクラスを必ず使用する、という前提の質問です。)attachmentクリップ1気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。件sort評価が高い順sort新着順sort古い順link+2こんにちは。DataContextに設定したからといってButtonのプロパティに反映されるわけではありません。ButtonのContentnにViewModelの値を設定したいのであれば、以下のような感じでしょう。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。23:07解答ありがとうございます。xamlでは、ボタンにはDataContextのみを指定することが前提(今回の仕様)とさせてください。解答ありがとうございます。xamlでは、ボタンにはDataContextのみを指定することが前提(今回の仕様)とさせてください。23:24XAMLを使わないとなるとコードビハインドを使うしかないです。何らかの方法でDataContextのプロパティとButtonコントロールのDependencyPropeprtyをバインドする必要があります。それはOKなのでしょうかXAMLを使わないとなるとコードビハインドを使うしかないです。何らかの方法でDataContextのプロパティとButtonコントロールのDependencyPropeprtyをバインドする必要があります。23:26はい、その方法は構いません。Buttonを継承したMyButtonを作ったとして、MyButtonの中でDependencyPropeprtyをバインドするような形になるのでしょうか?はい、その方法は構いません。23:28すみません、DataTemplateは使用しません。DependencyPropeprtyを使用するのが正解だと、うっすらと記憶しております。(うっすらと記憶にある業務コードの真似事なので...)すみません、DataTemplateは使用しません。DependencyPropeprtyを使用するのが正解だと、うっすらと記憶しております。23:35うーん...コードビハインドで冗長になっただけで、あまり意味を感じないですけど追記しました。うーん...コードビハインドで冗長になっただけで、あまり意味を感じないですけど追記しました。23:45ありがとうございます。求めていた答えでした。同様の機能が組み込まれていると思っていたのですが、違うということなのでしょうか。ありがとうございます。求めていた答えでした。同様の機能が組み込まれていると思っていたのですが、違うということなのでしょうか。BindingではBindingModeをTwoWayにしておかないと、途中でButtonDataのContentを書き換えても表示が変更されません。BindingではBindingModeをTwoWayにしておかないと、途中でButtonDataのContentを書き換えても表示が変更されません。23:54>ozwkさんその気持ちはよく分かるのですが...(私もそのギャップに戸惑って質問してしまいましたので)Buttonのような簡単なコントロールではなく、もっと複雑なコントロール(データツリーやデータグリッドなど)を継承してさらにカスタマイズする際に有用だという話を聞きました。Buttonのような簡単なコントロールではなく、もっと複雑なコントロール(データツリーやデータグリッドなど)を継承してさらにカスタマイズする際に有用だという話を聞きました。00:07動作をアーキテクチャ側でコントロールしたいという発想はありますよ。複数の設定を一か所で行って置き、またButtonDataのようなクラスを先に複数用意しておくことでコーダーの作業を単純化できます。この手のプログラミングはMagicと言われることがあります。動作をアーキテクチャ側でコントロールしたいという発想はありますよ。複数の設定を一か所で行って置き、またButtonDataのようなクラスを先に複数用意しておくことでコーダーの作業を単純化できます。この手のプログラミングはMagicと言われることがあります。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。22:59Btn1.ContentをBindingする方法もあるかとは思いますが、ここはBtn1自体をBindingする方法を取ることを前提とさせてください。ここはBtn1自体をBindingする方法を取ることを前提とさせてください。23:06解答ありがとうございます。xamlでは、ボタンにはDataContextのみを指定することが前提(今回の仕様)となります。解答ありがとうございます。xamlでは、ボタンにはDataContextのみを指定することが前提(今回の仕様)となります。キャンセル完了するlink0答えとしては、できません。DataContextはその名の通りContextであり、それ自体が表面に影響を及ぼすものではありません。DataContextに値を設定してもその他のものがBindingされていなければボタンに関連付けられたただのデータです。ボタンにDataContextのみを指定し、一切XAML・コードビハインドを修正せず画面に表示するようなハックはありません。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。23:32...っていうか業務コードでやってるのがあるならそっちちゃんと読みましょう。こっちで違う答えでもし解決したとしてそれをやったら全体としては悪化させてるだけです。...っていうか業務コードでやってるのがあるならそっちちゃんと読みましょう。こっちで違う答えでもし解決したとしてそれをやったら全体としては悪化させてるだけです。23:32Styleは確認していますが、特別にボタンに対してStyleは指定していなかった認識です。実際にはButtonを継承したクラスを使用しており、またこのクラスの中でDependencyPropeprtyを使用していた覚えがあります。(今となっては確認のしようがないのですが...)Styleは確認していますが、特別にボタンに対してStyleは指定していなかった認識です。実際にはButtonを継承したクラスを使用しており、またこのクラスの中でDependencyPropeprtyを使用していた覚えがあります。23:39Buttonを継承したクラスがあったんですね?それが無きゃこのなぞなぞは解けません。最初から固定のプロパティにBindする前提のコントロールは確か作れたと思います。それを伏せて質問しても同じ結果は得られないと思いますよ。その時点でXAML弄ってますからね...UserControlのサンプルなんかで見た記憶がありますし、たぶんContentにBindしておくだけでそういうボタンは作れたと思います。それが無きゃこのなぞなぞは解けません。最初から固定のプロパティにBindする前提のコントロールは確か作れたと思います。それを伏せて質問しても同じ結果は得られないと思いますよ。UserControlのサンプルなんかで見た記憶がありますし、たぶんContentにBindしておくだけでそういうボタンは作れたと思います。23:46申し訳ありません。構成に関して勘違いをしておりました。構成に関して勘違いをしておりました。データバインディングの更新方法が分かりません。頂いたご意見への回答は行っておりません。