AutoCompleteBox WPFでのValueMemberPathバインディングは、姓検索でトップの結果のみを返しますか?

StackOverflow https://stackoverflow.com/questions/4648527

  •  09-10-2019
  •  | 
  •  

質問

私はWPFツールキットでAutoCompleteBoxを使用していますが、この面倒を除くすべてのニーズを満たしています。 ValueMemberPath バインディング。これは、提案ボックスが自動化する値です。

したがって、この姓フィールドがあり、ユーザーが姓のタイピングを開始すると、それに基づいて上位10の結果を動的に取得します。ただし、ユーザーが「スミス」を入力してリストの4番目の名前を選択する場合、常に最初の結果を提案リストで取得します。 ValueMemberPath フィルターするように設定されています LastName. 。 「スミス」は、異なる名の50人のスミスがいる場合でも、「スミス」が最初の結果であると常に考えています。

私は、このプロパティに名を組み込む方法を見つけようとして脳を壊してきました。私は変えようとしました ValueMemberPath になる FullName LastNameとFirstNameに等しいフィールド。提案ボックスは、コンマが入力されるとすぐにソートを停止します。

私も問題に遭遇しました ValueMemberPath この値を動的に変更することはできず、デバッグ中にnullであるバグがあります。 AutoCompleteBoxバグ:ValueMemberPathはnullです.

誰も完全な解決策を持っていないかどうかを理解しています。将来、人々がこれに出くわした場合に備えて質問をすると思っただけで、これをどのように処理するかわからない。

役に立ちましたか?

解決

これはのバグです AutoCompleteBox. 。コントロールの内部 ValueMemberPathValueMemberBinding プロパティは、呼ばれるタイプを使用して実装されます BindingEvaluator. 。このクラスはaです FrameworkElement それ AutoCompleteBox 間接的な値バインディングを行うために使用します。

問題は、a BindingEvaluator 論理ツリーから切断されているため、バインディングは機能しません。これがその方法です AutoCompleteBox それを管理する必要があります BindingEvaluator それが機能するために:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    DataContext = new { FirstName = "Bill", LastName = "Smith" };
    var valueBindingEvaluator = new BindingEvaluator<string>();
    AddLogicalChild(valueBindingEvaluator);
    valueBindingEvaluator.ValueBinding = new Binding("FirstName");
    var value = valueBindingEvaluator.GetDynamicValue(DataContext);
}

これは、WPFツールキットを自分で再コンパイルすることをいとわない場合に修正するのが非常に簡単なバグです。

public Binding ValueMemberBinding
{
    get
    {
        return _valueBindingEvaluator != null ?
            _valueBindingEvaluator.ValueBinding : null;
    }
    set
    {
        if (_valueBindingEvaluator == null)
        {
            _valueBindingEvaluator = new BindingEvaluator<string>();
            AddLogicalChild(_valueBindingEvaluator);
        }
        _valueBindingEvaluator.ValueBinding = value;
    }
}

これにより、リンクしたバグも修正されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top