То, что должно произойти, это флажок, который у меня будет мигать назад и вперед из-за таймера. Переменная меняется, а форма - нет. Имя dataMember проверено с обеих сторон.
Класс, который должен быть похож на реализацию INotifyPropertyChanged отсюда: Реализация INotifyPropertyChanged - существует ли лучший способ?
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace Notice
{
public class Notifier : INotifyPropertyChanged
{
//used to prevent infinite loops
private bool controllerChanged;
public event PropertyChangedEventHandler PropertyChanged;
public Notifier()
{
controllerChanged = false;
}
public bool SetField<T>(ref T field, T value, string propertyName)
{
if (!controllerChanged)
{
controllerChanged = true;
if (EqualityComparer<T>.Default.Equals(field, value))
{
controllerChanged = false;
return false;
}
field = value;
OnPropertyChanged(propertyName);
controllerChanged = false;
return true;
}
return false;
}
protected virtual void OnPropertyChanged(string property)
{
//PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(property));
}
}
}
}
Переменная класса, только одна для пример
using System;
using Notice;
namespace Vars
{
public class Checks
{
private bool checkbox;
Notifier note = new Notifier();
public Checks()
{
checkbox = true;
}
public bool Checkbox
{
get { return checkbox; }
//set { WindowsFormsApp1.Program.note.SetField(ref checkbox, value, "Checkbox"); }
set { note.SetField(ref checkbox, value, "Checkbox"); }
}
}
}
Большая часть кода формы:
public Form1()
{
InitializeComponent();
//If you bind it using properties for the item in the form, don't need this line
checkBox1.DataBindings.Add("Checked", WindowsFormsApp1.Program.Ch, "Checkbox", true, DataSourceUpdateMode.OnPropertyChanged);
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
WindowsFormsApp1.Program.Ch.Checkbox = !WindowsFormsApp1.Program.Ch.Checkbox;
Console.WriteLine(WindowsFormsApp1.Program.Ch.Checkbox);
}
private void timer1_Tick(object sender, EventArgs e)
{
WindowsFormsApp1.Program.Ch.Checkbox = !WindowsFormsApp1.Program.Ch.Checkbox;
Console.WriteLine(WindowsFormsApp1.Program.Ch.Checkbox);
}