WPF: опция «Нет» при связывании данных с DataGridComboBoxColumn - PullRequest
1 голос
/ 26 июля 2010

Вот что я хочу:

  • Существует столбец со списком, связанный со свойством ApplicationKey ClassA.
  • ClassA.ApplicationKey - это Nullable<Int32>
  • Поле со списком заполнено ApplicationTokens из статической функции all.
  • ApplicationToken имеет свойство ApplicationName и ApplicationKey
  • Если в раскрывающемся списке выбран элемент, для свойства ClassA.ApplicationKey для выбранного элемента устанавливается значение ApplicationToken.ApplicationKey.
  • Параметр «Нет» в настоящее время представлен как ноль. Это можно изменить.

Текущий код

<DataGridComboBoxColumn 
    Header="Application" 
    SelectedValueBinding="{Binding ApplicationKey}"
    SelectedValuePath="ApplicationKey" 
    DisplayMemberPath="ApplicationName" 
    ItemsSource="{Binding Source={x:Static app:ApplicationLookup.GetAllOrNone}}"/>

В настоящее время привязка работает, за исключением того, что я не могу выбрать элемент «Нет» из списка. Это поле со списком показывает, но ничего не делает, когда я пытаюсь выделить его мышью.

Какой стандартный способ предложить ничего в связанном комбинированном окне?

Ответы [ 2 ]

0 голосов
/ 26 июля 2010

Когда я нуждался в пользовательском жесте типа None или (Выбрать все) для comboBox, мне нужно было создать статическое значение для токена и просто привязать коллекцию, в которой токен находится в первой позиции.Затем учитывайте все, что обрабатывает изменение значения:

    public string MidfixText {
        get { return _midfixText; }
        set {
            ...
            _filter(!_midfixText.Equals(Strings.ProjectSelection_MidfixChoice_SelectAll));
        }
    }

HTH,
Berryl

0 голосов
/ 26 июля 2010

Я не знаю, является ли это стандартным способом ведения дел, но, похоже, он работает:

  • Все токены приложений наследуются от токена
  • Токен имеет свойство "PrimaryKey".
  • Существует класс NullToken, определенный следующим образом:

    Открытый класс NullToken Наследует токен

    Private ReadOnly m_DisplayValue As String
    
    Private Sub New(ByVal displayValue As String)
        m_DisplayValue = displayValue
    End Sub
    
    Public Overrides Function ToString() As String
        Return m_DisplayValue
    End Function
    
    Public Overrides ReadOnly Property PrimaryKey As Integer?
        Get
            Return Nothing
        End Get
    End Property
    
    Public Shared ReadOnly BlankToken As New NullToken("")
    Public Shared ReadOnly NoneToken As New NullToken("None")
    Public Shared ReadOnly AllToken As New NullToken("All")
    

    Конечный класс

  • ApplicationLookup.GetAllOrNone возвращает коллекцию токенов с правильным NullToken в качестве первого элемента.

...