0

アプリケーション全体でメソッドを呼び出す方法を学ぼうとしていWpfます。

基本的な実験では、2つのページがPageDataありMainPageます。

PageDataコード:

namespace AppName
{
    public sealed partial class PageData 
    {
        public PageData()
        {
            this.InitializeComponent();
        }

        // works
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            mTest();
        }

        public bool mTest()
        {
            var newTbx = new TextBox{
                Text = "Hello",
                FontSize = 50
                };

            Grid.SetRow(newTbx, 3);
            Grid.SetColumn(newTbx, 3);
            gridMainPageData.Children.Add(newTbx);

            return true;
        }
    }
}

MainPageコード:

namespace AppName
{
    public sealed class MainPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void pageRoot_Loaded(object sender, RoutedEventArgs e)
        {
             PageData passCall = new PageData();

             mDisplayAlert(passCall.mTest().ToString());
        }
    }
}

ロードmTest()時に「true」の応答が返されるため(UIにメッセージを表示するために使用するメソッドがあります) 、メソッドは完了したようですが、UIは変更されません。上のボタンクリックイベントが機能するので、それが機能することを私は知っています。MainPagemDisplayAlertMainPagePageDatamTest()PageData

MainPageから呼び出されたときにUIが更新されないのはなぜですか?

4

1 に答える 1

1

本当にやりたいのは、まったく同じコントロールにアクセスするために同じインスタンスを使用することであるときに、 PageDatainsideの新しいインスタンスを作成するためです。メソッドMainPageを呼び出すと、まったく新しいものが作成され、最初のインスタンスに書き込んでいると思うときに、まったく新しいものにデータが割り当てられます。.test()TextBoxGridPageData

そこから多くのオプションがあります。あなたはできる :

  • PageDataインスタンスを作成するときに、インスタンスの参照を他のフォームに渡します。
  • インスタンスへの参照を使用して、2つのクラス間にイベントを作成しPageDataます。
  • プログラム全体が同じインスタンスを共有するように、メソッドとコントロールStaticを作成します。PageData(まったくお勧めしません)
  • 少し回避したい場合は、いつでもメソッドを設定して、コントロールのインスタンスのコピーをStatic作成できます。Static次に、コンパイラはStaticコントロールの参照を要求し、を使用してインスタンスのコピーを割り当てることができますControls.Find(yourControl)(どちらも良い習慣ではありません)。

個人的にはオプション番号1を使用しますが、今では選択肢があることがわかります。

于 2012-12-13T05:18:18.663 に答える