質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

11900閲覧

WPF データバインディングの方法がわからない

fatboyslim

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2017/03/30 07:18

編集2017/03/30 07:27

###前提・実現したいこと
wpfでバインド処理がうまくいきません。

やりいたこと
・下記ユーザーコントロールSubPanelを作成し、MainWindowにいくつか配置する。
・各SubPanelのテキストにViewModelで定義したText1、Text2・・・をBindingする。

###発生している問題・エラーメッセージ

型SubPanelのmyTextプロパティでBindingを設定することはできません。
BindingはDependencyObjectのDependencyPropertyでのみ設定できます。

上記警告がMainWindow.xamlのmyTextの部分で発生しておりうまくいきません。。。
コンパイルは通るのですが実行すると上記の部分で例外が発生します。

###該当のソースコード

xml

1SubPanel.xmal 2 3<UserControl x:Class="SubPanel " 4 5 6 7 8 <TextBox x:Name="Value"> 9 <TextBox.Style> 10 <Style TargetType="TextBox"> 11 <Setter Property="Text" Value="{Binding myText, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/> 12 </Style> 13 </TextBox.Style> 14 </TextBox> 15</UserControl>

C#

1SubPanel.xaml.cs 2 3public partial class SubPanel : UserControl 4{ 5 public SubPanel () 6 { 7 InitializeComponent(); 8 } 9 public string myText { get; set; } 10} 11 12

xml

1MainWindow.xaml 2 3<Window x:Class="MainWindow" 4 5 6 7 8 <avalonDock:LayoutAnchorable Title="SubPanel"> 9 <StackPanel> 10 <local:SubPanel x:Name="aaaa" myText="{Binding Text1}"/> 11 <local:SubPanel x:Name="bbbb" myText="{Binding Text2}"/> 121314 </StackPanel> 15 </avalonDock:LayoutAnchorable> 16</Window>

C#

1MainWindow.xaml.cs 2 3public partial class MainWindow : Window 4{ 5 public MainWindow() 6 { 7 InitializeComponent(); 8 this.DataContext = new ViewModel(this); 9 } 10} 11 12

###補足情報(言語/FW/ツール等のバージョンなど)
Windows8,1 pro 64bit
visual studio Community 2015

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記のように修正すれば、とりあえず回避できます。

C#

1SubPanel.xaml.cs 2 3public partial class SubPanel : UserControl 4{ 5 public SubPanel () 6 { 7 InitializeComponent(); 8 } 9 // public string myText { get; set; } 10 public string myText 11 { 12 get { return (string) GetValue( myTextProperty ); } 13 set { SetValue( myTextProperty, value ); } 14 } 15 public static readonly DependencyProperty myTextProperty = 16 DependencyProperty.Register( "myText", typeof( string ), typeof( SubPanel ), new PropertyMetadata( default( string ) ) ); 17}

これは勝手な想いですが、Binding 周りの壁はまたやってきると思います。
今回の警告の内容に対してもそうですが、依存関係プロパティやプロパティの変更通知に関してよく調べて理解しておかないと詰みます。

投稿2017/03/30 09:46

rtomp

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fatboyslim

2017/04/03 01:10

返信ありがとうございます。 教えていただいたコードでうまくいきました。 Binding 関連の知識がまだまだ足りてないと感じていますので知識を増やしていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問