Привязка данных к флажку не работает правильно - PullRequest
0 голосов
/ 01 июня 2019

У меня проблема с использованием привязки данных к флажку в C #. Флажок не отражает значение объекта, к которому он привязан.

Я использовал "checkBox1.DataBindings.Add (" Checked ", cb," t ", false, DataSourceUpdateMode.OnPropertyChanged)", чтобы связать простой источник данных с объектом, cb. Свойство bool «t» в объекте обновляется в зависимости от состояния флажка, но состояние флажка не отражает состояние объекта (cb.t).

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        test cb = new test();
        public Form1()
        {
            InitializeComponent();

            cb.t = false;

            checkBox1.DataBindings.Add("Checked", cb, "t", false, DataSourceUpdateMode.OnPropertyChanged);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            cb.t = true;
            //checkBox1.Refresh();
            //checkBox1.Invalidate();
        }
    }

    public class test
    {
        public bool t { set; get; }
    }
}

если я нажму кнопку1, состояние флажка не изменится; однако, если я устанавливаю cb.t = true в конструкторе, когда форма загружает флажок, состояние проверки совпадает со значением cb.t. спасибо за помощь.

1 Ответ

0 голосов
/ 01 июня 2019

Ваш вид не уведомляется об обновлениях, когда ваша собственность изменяется.Смотрите - Как: INotifyPropertyChanged

Попробуйте внести эти изменения -

using System.ComponentModel;
using System.Runtime.CompilerServices;

public class test : INotifyPropertyChanged
    {
        private bool _t;
        public bool t {
            get { return _t; }
            set
            {
                if (value != _t)
                {
                    _t = value;
                    NotifyPropertyChanged();
                }
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;

        // This method is called by the Set accessor of each property.
        // The CallerMemberName attribute that is applied to the optional propertyName
        // parameter causes the property name of the caller to be substituted as an argument.
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...