QA@IT

WPF ユーザーコントロール間のデータやりとりの方法など。。

10814 PV

お世話になります。
ユーザーコントロールが複数あり、

例えば、下記のように、UserContorl1とUserContorl2が1画面上で使われいる場合に

UserContor1からUserContorl2の内容を取得する場合どのようにすればよいのでしょうか?
両方に、テキストボックスがあったとした場合UC1からUC2のテキストデータを渡すもしくは
参照する方法はどのようにやるのでしょうか?

■画面1

<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:appCtrls="clr-namespace:WpfApplication5.Contorl"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <appCtrls:UserControl1></appCtrls:UserControl1> UC1にはテキストボックスとボタン
        <appCtrls:UserControl2></appCtrls:UserControl2> UC2にはテキストボックス
    </Grid>
</Window>

回答

flied_onionさん
レスありがとうございます。

プロパティとは、ユーザーコントロール側に依存プロパティを用意するということでしょうか?

また、メソッドとは、ユーザーコントロール側にメソッド用意するということでしょうか?
親画面からユーザーコントロールのメソッドにアクセスできるのでしょうか?
あるようでしたら、方法を教えていただけますでしょうか。

また、回答いただいた x:FieldModifier="public"ですが
グリッドのようになっている場合、例えば、3レコード目のテキストボックス
などにも、アクセスできるのでしょうか?

編集 履歴 (1)

各ユーザーコントロールに値にアクセスするためのプロパティやメソッドを用意するか、
ユーザーコントロール上に配置しているテキストボックスやボタンのFieldModefierを指定します。

<TextBox x:Name="InnerText" Text="TextBox" x:FieldModifier="public"/>

ただし、UserControl1からUserControl2にダイレクトにアクセスしたい場合は、メンバ変数として各々のインスタンスを受け取れる様にして、どこかでそのインスタンス変数に設定してあげる必要があります。
ただコントロール間の依存が強くなりすぎるので直接アクセスさせるのはあまりおすすめできません(そこまで依存が強いなら、コントロールとしてもまとめてしまってもいい気がします)。

値の変更を同期したいだけであればイベントなどを利用した方がいいでしょう。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。