1

これは私が欲しいものです:

  • ClassA の ApplicationKey プロパティにバインドされたコンボ ボックス列があります。
  • ClassA.ApplicationKey はNullable<Int32>
  • コンボボックスには、静的関数 all からの ApplicationTokens が取り込まれます。
  • ApplicationToken には ApplicationName および ApplicationKey プロパティがあります
  • ドロップダウンで項目が選択されると、ClassA.ApplicationKey プロパティが、選択された項目の ApplicationToken.ApplicationKey に設定されます。
  • 「なし」オプションは、現在 Null で表されます。これは変更できます。

現在のコード

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

リストから「なし」項目を選択できないことを除いて、現在バインディングは機能しています。コンボボックスには表示されますが、マウスで選択しようとしても何もしません。

バインドされたコンボボックスで何も提供しない標準的な方法は何ですか?

4

2 に答える 2

0

コンボボックスにNoneまたは(Select All)タイプのユーザージェスチャが必要なときに行ったことは、トークンの静的な値を作成し、最初の位置にトークンを含むコレクションにバインドすることです。次に、値の変更を処理しているものすべてでそれを説明します。

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

HTH、
ベリール

于 2010-07-26T19:57:52.067 に答える
0

これが標準的な方法かどうかはわかりませんが、うまくいくようです:

  • すべての ApplicationTokens は Token から継承します
  • トークンには「PrimaryKey」プロパティがあります。
  • そのように定義された NullToken クラスがあります。

    Public Class NullToken Inherits Token

    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 を持つ Token のコレクションを返します。

于 2010-07-26T19:44:26.413 に答える