1

我正在尝试将多选列表框绑定到list<int>我拥有的(IdProv)。我所做的是将 SelectedValue 绑定到一个属性,该属性将该值添加或删除到list<int>. 和 listbox.SelectedItems都list<int>应该同步。

列表框的 xaml 代码如下所示:

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

ItemsSource 在代码隐藏中设置。它是具有 Id 和 Name 属性的产品列表

问题在于未正确更新的 SelectedValue 属性(SelectedItem 都没有)。它们仅在选择第一个项目时设置,但随后它们会更新。

also when selecting an item making a click on the list, the SelectedValue just updates when I click the item that was first added.

知道发生了什么吗?我确定我在绑定中犯了一个愚蠢的错误,但这花了我几个小时,我无法弄清楚!

谢谢,马丁

4

1 回答 1

0

我做了一个简单的 hack,我不满意,但解决了问题。我编写了这个 SelectionChanged 处理程序,它负责设置 SelectedValue 未更新的属性:

    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 回答