1

list<int>複数選択リストボックスを(IdProv)にバインドしようとしています。私がしているのは、SelectedValueを、その値をに追加または削除するプロパティにバインドすることですlist<int>list<int>とlistbox.SelectedItemsの両方を同期する必要があります。

リストボックスのxamlコードは次のようになります。

            <ListBox DisplayMemberPath="Name"
                     SelectedValuePath="Id"
                     SelectedValue="{Binding Path=IdProv,
                                    Mode=OneWayToSource,
                                    ValidatesOnExceptions=True}"
                     SelectionMode="Multiple" />

ItemsSourceは分離コードで設定されます。これは、IdプロパティとNameプロパティを持つ製品のリストです。

問題は、正しく更新されない(SelectedItemでもない)SelectedValueプロパティにあります。最初の項目が選択されたときにのみ設定されますが、その後更新されます。

また、リストをクリックしてアイテムを選択すると、最初に追加されたアイテムをクリックしたときにSelectedValueが更新されます。

何が起こっているのか分かりますか?ビンディングでばかげた間違いをしたと思いますが、これには何時間もかかり、理解できません!

ありがとう、Martín

4

1 に答える 1

0

私は満足していない簡単なハックを作成しましたが、問題は解決しました。SelectedValue が更新されていないプロパティの設定を処理する、次の SelectionChanged ハンドラーを作成しました。

    private void idProveedorListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ListBox list = (ListBox)sender;
        if (list.SelectedItems.Count == 0)
        {
            ProdList.Last().IdProv.Clear();
            return;
        }
        else
        {
            Models.Proveedor lastSelected = list.SelectedItems[list.SelectedItems.Count - 1] as Models.Proveedor;
            if (lastSelected != list.SelectedItem)
                PProdList.Last().IdProveedorInt = lastSelected.Id;
        }
    }
于 2011-03-07T18:25:10.860 に答える