3

私の問題は、ValueMemberPath に同じ値を持つオブジェクトがある場合、AutoCompleteBox が正しい項目を選択した後に最初の項目を選択することです。SelectedItem をプロパティにバインドしましたが、同じ値を持つ項目が複数ある場合に 2 回発生することがわかります。

AutoCompleteBox を Person オブジェクトの ObservableCollection にバインドしました。

public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string FullName 
    {
        get
        {
            return Name + " - " + ID;
        }

    }
}

私の XAML は次のようになります。

<StackPanel>
    <inputtoolkit:AutoCompleteBox x:Name="autoCompleteBox" ValueMemberPath="Name" ItemsSource="{Binding Persons}" SelectedItem="{Binding SelectedPerson, Mode=TwoWay}">
        <inputtoolkit:AutoCompleteBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding FullName}" FontSize="14" FontWeight="Bold"></TextBlock>
            </DataTemplate>
        </inputtoolkit:AutoCompleteBox.ItemTemplate>
    </inputtoolkit:AutoCompleteBox>

    <TextBlock x:Name="textBlock" Text="{Binding SelectedPerson.ID}"></TextBlock>
</StackPanel>

私の Window_Loaded は次のようになります。

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        Persons = new ObservableCollection<Person>();

        Persons.Add(new Person() { ID = 1, Name = "Person" });
        Persons.Add(new Person() { ID = 2, Name = "Person" });
        Persons.Add(new Person() { ID = 3, Name = "Person" });
        Persons.Add(new Person() { ID = 4, Name = "Person" });

        autoCompleteBox.DataContext = this;
        textBlock.DataContext = this;
    }

「Per」と書くとドロップダウンに4項目表示されます。4 番目を選択すると、それが選択され、バインディングが更新されます。ただし、最初の項目に戻ります。これはバグまたは意図された動作ですか?この問題について誰か助けてもらえますか?

4

1 に答える 1

1

私はこれと同じ問題を抱えています。私はまだ試していませんが、このリンクを見つけました。解決策があるようです。
http://www.yumasoft.com/node/45

編集
私はこれが機能することを確認しました。

ユーザーがどのように違いを伝えるかを尋ねるコメントについて。ItemTemplateプロバイダーは、TextBox部分だけに示されているよりも詳細です。これにより、ユーザーは使用するレコードを決定できます。

于 2011-09-30T17:32:11.433 に答える