0

私はまだWPFに非常に慣れておらず、MVVMを理解するために1週間を費やしましたが、あまり運がありませんでしたが、特にこれらのルールに従おうとしているわけではありません。情報をクラスに保存するだけで、すべてのユーザーが制御できますアクセスして変更することもできます。これは私がこれまでに持っているものです:

namespace WpfApplication2.Funtions
{
    public class Binder : INotifyPropertyChanged
    {
        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion

        private string _Test_String;
        public string Test_String 
        { 
            get { return _Test_String; }
            set { _Test_String = value; OnPropertyChanged("Test_String"); }
        }

    }
}

ユーザー制御:

public partial class UserControl1 : UserControl
{

    //Funtions.Binder _B = new Funtions.Binder();

    public UserControl1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        MainWindow MW = new MainWindow();
        textBox1.Text = MW._B.Test_String;
    }
}

メインウィンドウ:

public partial class MainWindow : Window
{

    public Funtions.Binder _B = new Funtions.Binder();

    public MainWindow()
    {
        InitializeComponent();
        _B.Test_String = "HELLO";
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
       _B.Test_String =  "Hello from main";
    }



}

ここで何が起こっているかがわかります。ユーザー コントロールは MainWindow の新しいインスタンスを作成しているため、同じ値ではありませんが、MainWindow が usercontrol1 から作成した同じ Binder インスタンスに実際にアクセスして、読み取りおよび変更できるようにするにはどうすればよいですか? または、この方法で欲しいものを達成できない場合、どのようにそれを行うべきですか? これには非常に簡単な解決策が必要であることはわかっています。プロジェクト設定を使用したくありません。

非常に初心者の質問を気にしないでください。しかし、私は何日も立ち往生しています。簡単な説明と解決策が必要なだけです。ありがとうございました。

4

2 に答える 2

0

ユーザーコントロールのボタンクリックでメインウィンドウの同じインスタンスを使用する必要があります。次のように

var mainwindow =Application.Current.MainWindow;

同じインスタンスを使用して値を取得

textBox1.Text = mainwindow .Test_String;
于 2013-10-15T05:35:53.133 に答える
0

メイン ウィンドウのインスタンスを取得する必要があります。新しいウィンドウを作成する必要はありません。

private void button1_Click(object sender, RoutedEventArgs e)
{
    MainWindow MW = Application.Current.MainWindow;
    textBox1.Text = MW._B.Test_String;
}
于 2013-10-15T04:56:44.850 に答える