привязка usercontrol к противоположности bool свойства

Довольно простой: я надеюсь делать то же как это, но в winforms. Все, что Google, кажется, тянет, wpf конкретный (т.е. Я не хочу ссылаться на presentationframework.dll),

Когда объяснили, не хотите ли Вы читать ссылку:

Следующее является представлением намерения того, что я хотел бы сделать, хотя оно, очевидно, не работает.

CheckBox1.DataBindings.Add(new Binding("Checked", this.object, "!SomeBool"));

16
задан Community 23 May 2017 в 10:29
поделиться

2 ответа

У вас есть два варианта:

  1. Создать объект привязки вручную и прикрепить к формату Формат и Разберите события и поменяйте местами значения в каждом.
  2. Создайте дополнительное свойство в классе, которое просто меняет логику предполагаемого свойства

Первый вариант более чистый, 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 требует, чтобы вы адаптировали свой класс к дизайну пользовательского интерфейса.

23
ответ дан 30 November 2019 в 17:04
поделиться

Для этого я бы сделал свойство только для чтения с именем NotSomeBool в том же классе, где у вас есть свойство SomeBool , и вместо этого привязал бы к этому свойству.

1
ответ дан 30 November 2019 в 17:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: