ListBox mvvm 学习笔记
1. ListBox MvvM
例子1. 简单的绑定,ItemsSource 绑定到一个实现了IEnumerable 的类上。一般该绑定都是双向的,所以优先考虑使用 ObservableCollection<T>
的类。这样界面和后台数据就同步了。针对于ListBox 的控件,我们比较关心的是SelectedItem,在mvvm 中,为了解耦前端界面和后台的逻辑,我们采用
如下的方式,SelectedItem 双向绑定到ViewModel上的一个公用属性上。同时,该公用属性要实现INotifyPropertyChanged 接口,例子如下:
XAML:
<ListBox Name="lst_catalog" ItemsSource="{Binding Catalogs}" SelectedItem="{Binding SelectedCatalog, Mode=TwoWay}">
</ListBox>
class:
public class ViewModel:InotifyPropertyChanged
{
public string SelectedCatalog
{
get
{
return _selectedCatalog;
}
set
{
_selectedCatalog = value;
UpdateItemSources();
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged()
{
if(PropertyChanged!=null)
{
PropertyChanged(this,new PropertyChangedEventArgs(""));
}
}
}
2. ListBox 中使用DisplayMemberPath 和Converter 来限制listBox 中显示的内容。例子如下:
xaml:
<ComboBox Margin="5,0" Grid.Column="2" SelectedItem="{Binding ParamValue.RoleOSTemplate, Mode=TwoWay, Converter={StaticResource SelectedOsConverter}}" >
<ComboBox.ItemsSource>
<MultiBinding Converter="{StaticResource OsFilter}">
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.OSList"/>
<Binding Path="ParamName"/>
</MultiBinding>
</ComboBox.ItemsSource>
</ComboBox>
class:
[selectedOSConverter]
public class TargetOSConvert : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string osTemplate = value as string;
return GeneralInfoViewModel.SingleInstance.OSList.Where(each => each.OSName==osTemplate).FirstOrDefault();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
OSMapping osm = value as OSMapping;
return osm.OSName;
}
}
[OSFilter]
public class OSListConvert:IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
ObservableCollection<OSMapping> allList = (ObservableCollection<OSMapping>)value[0];
string roleName = (string)value[1];
if (roleName == null)
return null;
string osType = roleName.Contains("TSVDA") || roleName.Contains("DDC") || roleName.Contains("SF") ? "server" : "desktop";
ObservableCollection<OSMapping> returnVal = new ObservableCollection<OSMapping>( allList.Where(each => each.OSType==osType).ToList()) ;
return returnVal;
}
public object[] ConvertBack(object value,Type[] targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
ListBox mvvm 学习笔记的更多相关文章
- MVVM学习笔记
MVVM学习笔记 1.MVVM的简介 MVVM模式是Model-View-ViewModel模式的简称,也就是由模型(Model).视图(View).视图模型(ViewModel),其目的是为了实现将 ...
- knockout学习笔记目录
关于knockout学习系列的文章已经写完,这里主要是做个总结,并且将目录罗列出来,方便查看.欢迎各位大神拍砖和讨论. 总结 kncokout是一个轻量级的UI类库,通过MVVM模式使前端的UI简单话 ...
- Caliburn.Micro学习笔记(一)----引导类和命名匹配规则
Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...
- Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能
Caliburn.Micro学习笔记目录 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双 ...
- NGUI 学习笔记实战之二——商城数据绑定(Ndata)
上次笔记实现了游戏商城的UI界面,没有实现动态数据绑定,所以是远远不够的.今天采用NData来做一个商城. 如果你之前没看过,可以参考上一篇博客 NGUI 学习笔记实战——制作商城UI界面 ht ...
- Windows phone 8 学习笔记(5) 图块与通知(转)
基于metro风格的Windows phone 8 应用提到了图块的概念,它就是指启动菜单中的快速启动图标.一般一个应用必须有一个默认图块,还可以有若干个次要图块.另外,通知与图块的关系比较密切,我们 ...
- Windows phone 8 学习笔记(2) 数据文件操作(转)
Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式 ...
- Windows phone 8 学习笔记(9) 集成
原文:Windows phone 8 学习笔记(9) 集成 本节整理了之前并没有提到的Windows phone 8 系统相关集成支持,包括选择器.锁定屏幕的.联系人的访问等.选择器列举了若干内置应用 ...
- Windows phone 8 学习笔记(7) 设备
原文:Windows phone 8 学习笔记(7) 设备 本节主要涉及到 Windows phone 8 手机支持的各类设备,包括相机.设备状态,振动装置等.还有各类感应器,包括磁力计.加速度器和陀 ...
随机推荐
- JavaScript常用代码段
总结一下在各种地方看到的还有自己使用的一些实用代码 1)区分IE和非IE浏览器 if(!+[1,]){ alert("这是IE浏览器"); } else{ alert(" ...
- 【Python】django安装
官方下载:https://www.djangoproject.com/download/ 报错 [root@test Django-]# python setup.py install Traceba ...
- 【缓存】Sql Server 2005/2008 SqlCacheDependency查询通知的使用总结
Sql server 7.0/2000下 SqlCacheDependency使用轮询的方式进行缓存失效检查, 虽然ms说对服务器压力不大, 但还是有一些的, 而且对于不常改动的混存内容无休止的轮询感 ...
- Oracle笔记 十一、PL/SQL函数和触发器
--创建函数 create or replace function add_sal(sSal number) return number is begin if (sSal > 5000) th ...
- js,jquery获取下拉框选中的option
js获取select选中的值: var sel=document.getElementById("select1"); var index = sel.selectedIndex; ...
- 设计模式-单例模式(Singleton)
模式说明: 保证每一个类仅有一个实例,并提供一个访问它的全局访问点(即自行实例化并向整个系统提供这个实例). 应用场景: 1.如配置文件取值类AppConfig(本身实例化对象比较大,且没有必要实例化 ...
- 用IKVMC将jar转成dll供c#调用
用IKVMC将jar转成dll供c#调用 ikvmc c# dll jar 用IKVMC将jar转成dll供c#调用 前言 ikvmc介绍 ikvmc下载安装 下载并解压 设置环境变量 jar-> ...
- 软件工程 speedsnail 第二次冲刺3
20150520 完成任务:划线第三天,能画出一条直黄线且与蜗牛共存: 遇到问题: 问题1 碰撞检测有缺陷 解决1 没有解决 明日任务: 实现蜗牛与线的碰撞
- Oracle存储过程知识汇总
基本语法篇: CREATE OR REPLACE PROCEDURE 存储过程名 //CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做ske ...
- Bootstrap Alert Auto Close
http://stackoverflow.com/questions/23101966/bootstrap-alert-auto-close http://jsfiddle.net/mfX57/ $( ...