MVVM :How to select multiple items in listbox
来源:互联网 发布:南卫理公会大学知乎 编辑:程序博客网 时间:2024/06/05 07:51
接触MVVM模式已经有两个月了,关于V-VM这两部分比较好处理,就是那个可恶的Model部分难搞。追根究底,控件的使用不太好办啊。这次遇见“如何在listbox上多项选择,双击添加进另一个listbox”。
(1) View:
添加引用
xmlns:vm="clr-namespace:Project.ViewModel;assembly=Project.ViewModel"
添加控件
<vm:MultipleSelectionListBox Width="180" SelectionMode="Extended" IsSynchronizedWithCurrentItem="True"
SelectedMultipleItems="{Binding SelectedMultipleItems, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Left"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ItemsSource="{Binding Items}"
DisplayMemberPath="Name"
SelectedItem="{Binding SelectedItem}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding AddCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</vm:MultipleSelectionListBox>
(2) ViewModel:
添加引用
using System;
using System.Windows;
using System.Windows.Controls;
using System.Collections;
添加属性
private IList _selectedMultipleItems;
public IList SelectedMultipleItems
{
get { return _selectedMultipleItems; }
set
{
_selectedMultipleItems = value;
base.RaisePropertyChanged("SelectedMultipleItems");
}
}
添加控件扩展方法
public class MultipleSelectionListBox : ListBox
{
public IList SelectedMultipleItems
{
get { return (IList)GetValue(SelectedMultipleItemsProperty); }
set { SetValue(SelectedMultipleItemsProperty, value); }
}
public static readonly DependencyProperty SelectedMultipleItemsProperty =
DependencyProperty.Register("SelectedMultipleItems", typeof(IList), typeof(MultipleSelectionListBox), new UIPropertyMetadata(null));
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
base.OnSelectionChanged(e);
SelectedMultipleItems = this.SelectedItems;
}
}
本以为方法可行的,当为了保证viewmodel的独立性,把其扩展控件的方法单独挪到一个类库时,才发现viewmodel里多用了一个引用:system.xaml。才使得此方法可行。从MVVM的思想上讲,viewmodel是不能使用这个引用的,破坏了其结构。
留着备用吧。
- MVVM :How to select multiple items in listbox
- How to get multiple select value both in javascript and php
- How To Sort Items in a CListCtrl in Report View
- how to select data in multiple datatables after using join,group by and order by in Linq
- 1. How to open items in other iOS Apps
- How to add dividers and spaces between items in RecyclerView?
- How to create your own ListBox in C#
- How-to rename multiple files in Linux How-to rename multiple files
- HOW TO : Select column in Notepad++
- How to: Retrieve List Items
- RadComboBox: How to Sort Items
- Multiple items failed in HDCP1.x CTS
- How to setup/configure multiple stores in Magento?
- how to order multiple tags in Java document comments
- How-to Rename Multiple Photos at Once in Windows
- How to chain multiple MapReduce jobs in Hadoop
- How to define multiple controllers for one view in angularJS?
- How to implement multiple channels in wifi module of ns3
- LinkedHashMap 的介绍
- 更新引发的问题
- 通过本地上传工具把CSV文件导入到百会报表
- Hibernate的检索方式(二)
- Hibernate的检索方式(三)
- MVVM :How to select multiple items in listbox
- 怎样做才能成为程序员高手
- 查询Oracle当前登录用户的所有权限
- 如何获取StatusBar的高度(Android平台)
- Hibernate的检索方式(四)
- CriticalSection
- Hibernate的检索方式(五)
- Hibernate事务与并发等
- SPI时序详解