Довольно простой: я надеюсь делать то же как это, но в winforms. Все, что Google, кажется, тянет, wpf конкретный (т.е. Я не хочу ссылаться на presentationframework.dll),
Когда объяснили, не хотите ли Вы читать ссылку:
Следующее является представлением намерения того, что я хотел бы сделать, хотя оно, очевидно, не работает.
CheckBox1.DataBindings.Add(new Binding("Checked", this.object, "!SomeBool"));
У вас есть два варианта:
вручную и прикрепить к формату Формат
и Разберите
события и поменяйте местами значения в каждом. Первый вариант более чистый, IMO, поскольку он не заставляет API вашего класса следовать дизайну пользовательского интерфейса, хотя второй вариант - (незначительно) проще.
Пример варианта 1
private void SwitchBool(object sender, ConvertEventArgs e)
{
e.Value = !((bool)e.Value);
}
...
Binding bind = new Binding("Checked", this.object, "SomeBool");
bind.Format += SwitchBool;
bind.Parse += SwitchBool;
CheckBox1.DataBindings.Add(bind);
Пример варианта 2
public class SomeClass
{
public bool SomeBool { get; set; }
public bool NotSomeBool
{
get { return !SomeBool; }
set { SomeBool = !value; }
}
}
...
CheckBox1.DataBindings.Add("Checked", this.object, "NotSomeBool");
Опять же, я очень предпочитаю вариант 1, поскольку вариант 2 требует, чтобы вы адаптировали свой класс к дизайну пользовательского интерфейса.
Для этого я бы сделал свойство только для чтения с именем NotSomeBool
в том же классе, где у вас есть свойство SomeBool
, и вместо этого привязал бы к этому свойству.