Как я использую привязку данных с переключателями Windows Forms?

Из того, что я понимаю из вашего вопроса, вы храните базовые указатели объектов, но извне вы хотите оперировать ими как производными объектами, которыми они являются.

В этом случае крайне важно понизить рейтинг.

Хотя ваш вопрос расплывчатый, я вижу, что ваша ситуация очень похожа на элемент управления в диалоговом окне, где оба являются окнами, но говорят, что CheckBox - это специализированное окно, над которым вы хотите работать, в частности, с расширенными функциями.

Основные рамки используют приведение для этой проблемы, как MFC здесь .

В новой платформе Qt также используется приведение, как в функции findChildren .

Я надеюсь, что вы сможете оценить свое решение, учитывая эту информацию, и, возможно, помириться с ней.

9
задан Peter Mortensen 3 April 2012 в 14:23
поделиться

4 ответа

Я нашел способ сделать этот Набор данных/Таблицу данных использования.

Я делаю вычисляемый столбец в DataTable с выражением IIF(Foo=true, false, true). Давайте назовем тот столбец Bar.

Bar имеет булевскую переменную типа. Теперь можно связать тот RadioButton.Checked кому: Foo и один к Bar.

Добираться Bar проверка/снятие выделения для распространения назад к Foo необходимо перейти к сгенерированному коду DataTable и добавить одну строку, последнюю в этом образце:

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public bool Bar {
    get {
        try {
            return ((bool)(this[this.tableradio.BarColumn]));
        }
        catch (global::System.InvalidCastException e) {
            throw new global::System.Data.StrongTypingException("The value for column \'Bar\' in table \'radio\' is DBNull.", e);
        }
    }
    set {
        this[this.tableradio.BarColumn] = value;
        this[this.tableradio.FooColumn] = !value;
    }
}
1
ответ дан 4 December 2019 в 22:31
поделиться

Если Ваш бизнес-объект реализует INotifyPropertyChanged (который делает обязательную работу более хорошей), можно добавить следующий код к визуальному интерфейсу где BO Ваш бизнес-объект и объявляется withevents и BO.Value булево свойство, с которым требуется связать.

Public Property NotValue() As Boolean
    Get
        Return Not BO.Value
    End Get
    Set(ByVal value As Boolean)
        BO.Value = Not value
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("NotValue"))
    End Set
End Property


Private Sub BO_PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Handles BO.PropertyChanged
    If e.PropertyName = "Value" Then
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("NotValue"))
    End If
End Sub

Следующая привязка поднимет трубку переключатели.

RBTrue.DataBindings.Add(New Binding("Checked", Me.BO, "Value", False, DataSourceUpdateMode.OnPropertyChanged))
RBFalse.DataBindings.Add(New Binding("Checked", Me, "NotValue", False, DataSourceUpdateMode.OnPropertyChanged))

Визуальный интерфейс должен также реализовать INotifyPropertyChanged. Этот метод работает оба пути: исходное значение обновляется, если интерфейс изменится и если исходное значение изменится, то интерфейс обновит правильно.

1
ответ дан 4 December 2019 в 22:31
поделиться

Вам придется только связать одни из средств управления, пока Вы удостоверяетесь, что они находятся в той же группе.

Вы могли также рассмотреть DropDown.

-3
ответ дан 4 December 2019 в 22:31
поделиться
  1. Свяжите RadioButton , который напрямую связан с вашим логическим значением (т. Е. Проверяется, когда значение истина ).
  2. Добавить событие обработчик события CheckedChanged в этом RadioButton , который выглядит следующим образом:

     private void radioButton_CheckedChanged (объект-отправитель, EventArgs e)
    {
     foreach (Binding b в ((Control) sender) .DataBindings)
     b.WriteValue ();
    }
    
7
ответ дан 4 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

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