【问题标题】:Re-ordering a Silverlight Listbox - MVVM-stylee重新排序 Silverlight 列表框 - MVVM 样式
【发布时间】:2011-06-04 19:44:22
【问题描述】:

我正在使用 RIA 服务为启用了 MVVM-Light 的 Silverlight 应用程序提供实体。

我有一个 ViewModel,它将实体的 CollectionViewSource 呈现给视图上的列表框。我使用 CollectionViewSource 的原因是我可以控制 ViewModel 中的选定项目;创建新项目后,我可以创建它,然后选择它进行进一步编辑(在列表框中选择一个项目可以在数据表单中编辑该项目)。

我需要为列表框启用拖放功能以允许对项目进行重新排序。我已经研究过使用 Silverlight 工具包的 ListBoxDragDropTarget 来启用此功能,但它不起作用 - 我认为这是因为我需要将列表框 ItemsSource 设置为 ObservableCollection。

如果我将 ViewModel 中的 CollectionViewSource 更改为 ObservableCollection,如何以编程方式从 ViewModel 更改列表框的 Selected Item?

有什么想法吗?

【问题讨论】:

    标签: silverlight mvvm listbox


    【解决方案1】:

    您可以将您的ObservableCollection<T> 包装在CollectionViewSource...中,如here...这样,它是CollectionViewSource 使用的数据的支持集合,获得INotifyCollectionChanged 行为而不会丢失受益于CollectionViewSource;您需要选择一个项目。

        <UserControl.Resources>
           <local:DataSource x:Key="dataSource" />
              <CollectionViewSource x:Name="cvs" 
                        Source="{Binding Names, Source={StaticResource dataSource}}">
              </CollectionViewSource>
        </UserControl.Resources>
    
        ...
    
        <ListBox ItemsSource="{Binding Source={StaticResource cvs}}" 
                   Margin="5,5,5,1" Grid.ColumnSpan="4" />
    

    可以在 here 找到 Tim Heuer 的端到端示例,它也应该可以帮助您实现完整的解决方案。

    【讨论】:

    • 谢谢亚伦,我会试试看的。
    • 实际上我无法获得此处建议的任何一种方法来使用 MVVM 模式,看起来这可能是 ListBoxDragDropTarget 的错误...
    • @Drammy 看看这个...silverlightfeeds.com/post/1325/… 因为它有一个端到端的例子...
    • 感谢 Aaron,解决这个问题帮助我破解了它!我的列表框只是一个普通的列表框,但是发布的示例中的那个使用 StackPanel 作为 ItemsPanelTemplate ...它可能在手册中的某个地方也这么说!实时调频! :-)
    【解决方案2】:

    您可以在 ViewModel 中拥有一个单独的属性,即 SelectedThing 并将 ListBox.SelectedItem 绑定到它

    <ListBox ItemsSource="{Binding TheCollection}" SelectedItem="{Binding SelectedThing}" />
    

    【讨论】:

    • 感谢 alpha-mouse - 我实际上已经尝试过这种方法,但我一定做错了什么,因为我没有让它按我想要的方式工作。如果我重新开始,那么我会选择这条路线。但是 Aaron 的建议意味着更少的工作......(这只是懒惰吗?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多