Databinding a ListBox with SelectionMode = Multiple

两盒软妹~` 提交于 2019-11-29 05:59:27

What you can do to get around this:

Create an IsSelected property on the items you are displaying in the list. Im assuming these are represented by a view model as well. So it shouldn't be a drama to add an extra property. If they are just business objects consider using a wrapper class to painlessly wrap them in view model items (shameless plug - here is one such system. I use it daily to wrap my business objects)

Use an items container style to bind the IsSelected property of the list box item to the IsSelected property of the items you are displaying, like so

    <ListBox.ItemContainerStyle>
       <!-- This Style binds a ListBoxItem to a the ViewModelItem. -->
       <Style
          TargetType="{x:Type ListBoxItem}">
          <Setter
             Property="IsSelected"
             Value="{Binding IsSelected, Mode=TwoWay}" />
       </Style>
    </ListBox.ItemContainerStyle>

(might need a based on attribute on the style, not sure)

Now whenever a list box item gets selected your view model will know about it and can update its internal collection as required.

I ended up using a bit of code-behind in a SelectionChanged event handler to set the view model property. Simpler than creating object wrappers.

Brian Hinchey

I have posted a technique for allowing a read-only binding to the SelectedItems property of a WPF DataGrid just by extending the DataGrid that I believe could easily be co-opted for a ListBox. You can see my post at https://stackoverflow.com/a/16953833/62278

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!