Проблема с управлением моделью в приложении Windows - PullRequest
2 голосов
/ 08 декабря 2010

ки.У меня есть вопрос об использовании моей модели данных в пользовательском интерфейсе.Проблема с окнами форм.На уровне представления я устанавливаю равные для своей модели данных соответствующие текстовые поля, метки и т. Д., Но все время, когда меняется моя модель данных, я также должен вручную обновлять пользовательский интерфейс.То же самое происходит снова, когда я изменяю какое-либо значение в textBox или что-то еще в пользовательском интерфейсе, я должен вручную обновить мою модель данных.

Разве нет способа, лучше сделать так, чтобы это происходило автоматически?Когда я изменяю модель данных, пользовательский интерфейс также изменяется соответственно?Также Когда я изменяю значения в пользовательском интерфейсе, модель данных также обновляется автоматически ??

С уважением,

-Kushan-

1 Ответ

2 голосов
/ 08 декабря 2010

Вы можете использовать Привязка данных в Windows Forms для достижения того, что вы хотите.Здесь различное количество образцов здесь .

Пример ниже представляет собой один Form с двумя TextBox (textBox1, textBox2) элементами управления и одним Button (button1) на нем.Если вы поместите новое имя в textbox2 и нажмете кнопку 1, он установит свойство для свойства Person.FirstName, которое будет распространяться на textBox1, поскольку оно было связано с данными, как видно из ctor Form1.

    public partial class Form1 : Form
    {
        Person _person = new Person();

        public Form1()
        {
            InitializeComponent();

            textBox1.DataBindings.Add(new Binding("Text", _person, "FirstName"));
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _person.FirstName = textBox2.Text;
        }
    }

    public class Person : INotifyPropertyChanged
    {
        private String _firstName = "Aaron";
        public String FirstName
        {
            get
            {
                return _firstName;
            }
            set 
            {
                _firstName = value;
                PropertyChangedEventHandler handler = PropertyChanged;
                if(handler != null)
                    handler(this, new PropertyChangedEventArgs("FirstName"));
            }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }

  [1]: http://msdn.microsoft.com/en-us/library/ef2xyb33.aspx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...