.NET связывает проверенное свойство флажка с типом данных SqlByte

Это не удается:

dtaAutomaticFlag.DataBindings.Add("Checked", BndSource, "AutomaticFlag");

скорее всего, потому что AutomaticFlag определяется как:

public SqlByte AutomaticFlag { get; set; }

SQL Server крошечный. Причина в том, что мне не нужны только 0 и 0 в качестве значений.

Мне нужно проверить, равно ли значение 1 , не проверено для ВСЕХ других значений.

Одна вещь, о которой я подумал, - это создать дополнительное свойство AutomaticFlagBoolean в моем классе, проверить AutomaticFlag и привязать к новому свойству.

Это то, что я пробовал, но всегда получаю ложь:

    private SqlByte _automaticFlag;
    public SqlByte AutomaticFlag
    {
        get { return _automaticFlag; }
        set
        {
            if (_automaticFlagBoolean)
            {
                _automaticFlag = 1;
            }
            else
            {
                _automaticFlag = 0;
            }
        }
    }

    private bool _automaticFlagBoolean;
    public bool AutomaticFlagBoolean
    {
        get
        {
            if (_automaticFlag == 1)
            {
                return _automaticFlagBoolean = true;
            }
            else
            {
                return _automaticFlagBoolean = false;
            }
        }
        set { _automaticFlagBoolean = value; }
    }

это в моей привязке:

dtaAutomaticFlag.DataBindings.Add("Checked", BndSource, "AutomaticFlagBoolean");

person e4rthdog    schedule 27.03.2014    source источник


Ответы (1)


Флажок ожидает логическое значение для привязки.

Попробуйте использовать локальную переменную для хранения значения:

private SqlByte _automaticFlag;
private bool _automaticFlagBoolean;

public SqlByte AutomaticFlag
{
    get { return _automaticFlag; }
    set
    {
        _automaticFlag = value;
        _automaticFlagBoolean = (_automaticFlag != 0);
    }
}

public bool AutomaticFlagBoolean
{
    get
    {
        return _AutomaticFlagBookean;
    }
    set { _automaticFlagBoolean = value; 
       if (_automaticFlagBoolean) {
          _automaticFlag = 1;
       } else {
          _automaticFlag = 0;
       }
    }
}

Затем привяжите так:

dtaAutomaticFlag.DataBindings.Add("Checked", BndSource, "AutomaticFlagBoolean");

Ваш класс также должен реализовать INotifyPropertyChanged, но это немного выходит за рамки вашего вопроса.

person C-Pound Guru    schedule 27.03.2014
comment
и что я буду привязывать к своему dtaAutomaticFlag.DataBindings.Add? - person e4rthdog; 27.03.2014
comment
Я обновил свой вопрос тем, что я пробовал с вашим предложением, но это не работает. Я всегда получаю ложное значение - person e4rthdog; 27.03.2014
comment
@e4rthdog: я обновил свой ответ. Здесь у вас есть некоторые проблемы с дизайном, но мой ответ должен предотвратить рекурсию и позволить вам привязать логическое значение к флажку (хотя без реализации INotifyPropertyChanged любые изменения в коде вашего свойства не будут отражаться на связанный элемент управления.) - person C-Pound Guru; 27.03.2014
comment
я увидел свои недостатки и вернулся к этому: fine" title="привязка к проверенному свойству испортила привязку пользовательского интерфейса к тексту в порядке"> stackoverflow.com/questions/22692566/ я был бы признателен, если бы вы тоже посмотрели туда... - person e4rthdog; 27.03.2014
comment
Не могли бы вы также объяснить мне, что именно вас беспокоит в плане дизайна? - person e4rthdog; 27.03.2014