wpf学习之(IValueConverter)
学习IValueConverter的使用
public class StatuToNullableBoolConverter : IValueConverter
{ /// <summary>
/// 将Statu转换为bool?
/// </summary>
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
State s = (State)value;
switch (s)
{
case State.Available:
return true;
case State.Locked:
return false;
case State.Unknown:
default:
return null;
}
} /// <summary>
/// 将bool?转换为Statu
/// </summary>
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool? nb = (bool)value;
switch (nb)
{
case true:
return State.Available;
case false:
return State.Locked;
default:
return State.Unknown;
}
}
}
class CategoryToSourceConverter : IValueConverter
{ public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Category c = (Category)value;
switch (c)
{
case Category.Bomber:
return @"\Icon\sys_ct_icon\chardevice.ico";
case Category.Fighter:
return @"\Icon\sys_ct_icon\file_broken.ico";
default:
return null;
}
} public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Window x:Class="WpfApplication1.WindowConvertListItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1.DXSL.BLL"
Title="WindowConvertListItem" Height="300" Width="300">
<Window.Resources>
<local:CategoryToSourceConverter x:Key="cts" />
<local:StatuToNullableBoolConverter x:Key="ctnb" />
</Window.Resources> <Grid>
<StackPanel Background="LightBlue">
<ListBox x:Name="listboxPlane" Height="160" Margin="5,5" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="20" Height="20" Source="{Binding Path=Category,Converter={StaticResource cts}}" />
<TextBlock Text="{Binding Path=Name}" Width="60" Margin="80,0" />
<CheckBox IsThreeState="True" IsChecked="{Binding Path= Statu, Converter={StaticResource ctnb}}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button x:Name="btnLoad" Content="load" Height="25" Margin="5,5" Click="btnLoad_Click" />
<Button x:Name="btnSave" Content="save" Height="25" Margin="5,5" Click="btnSave_Click" />
</StackPanel>
</Grid>
</Window>
/// <summary>
/// WindowConvertListItem.xaml 的交互逻辑
/// </summary>
public partial class WindowConvertListItem : Window
{
public WindowConvertListItem()
{
InitializeComponent();
} private void btnLoad_Click(object sender, RoutedEventArgs e)
{
List<Plane> list = new List<Plane>()
{
new Plane (){Category =Category.Bomber,Name="b_1", State =State.Unknown},
new Plane (){Category =Category.Bomber,Name="b_2",State =State.Available},
new Plane (){Category =Category.Fighter,Name="b_3",State =State.Locked},
new Plane (){Category =Category.Fighter,Name="b_4", State =State.Available}
}; this.listboxPlane.ItemsSource = list;
} private void btnSave_Click(object sender, RoutedEventArgs e)
{
StringBuilder str = new StringBuilder(); foreach (Plane item in this.listboxPlane.Items)
{
str.AppendLine(string.Format("{0},{1},{2}", item.Category, item.Name, item.State));
} System.IO.File.WriteAllText("plane.csv", str.ToString());
}
}
/// <summary>
/// 种类
/// </summary>
public enum Category
{
Bomber,
Fighter
} /// <summary>
/// 状态
/// </summary>
public enum State
{
Available,
Locked,
Unknown
} public class Plane
{
public Category Category { get; set; } public string Name { get; set; } public State State { get; set; }
}
转载:http://www.cnblogs.com/-ShiL/archive/2013/03/14/Star201303141456.html
wpf学习之(IValueConverter)的更多相关文章
- WPF学习(8)数据绑定
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
- WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决
原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...
- WPF学习07:MVVM 预备知识之数据绑定
MVVM是一种模式,而WPF的数据绑定机制是一种WPF内建的功能集,两者是不相关的. 但是,借助WPF各种内建功能集,如数据绑定.命令.数据模板,我们可以高效的在WPF上实现MVVM.因此,我们需要对 ...
- WPF学习(8)数据绑定 https://www.cnblogs.com/jellochen/p/3541197.html
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
- 【WPF学习】第五十章 故事板
正如上一章介绍,WPF动画通过一组动画类(Animation类)表示.使用少数几个熟悉设置相关信息,如开始值.结束值以及持续时间.这显然使得它们非常适合于XAML.不是很清晰的时:如何为特定的事件和属 ...
- WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)
时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码) 已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...
- WPF学习05:2D绘图 使用Transform进行控件变形
在WPF学习04:2D绘图 使用Shape绘基本图形中,我们了解了如何绘制基本的图形. 这一次,我们进一步,研究如何将图形变形. 例子 一个三角形,经Transform形成组合图形: XAML代码: ...
- WPF学习之资源-Resources
WPF学习之资源-Resources WPF通过资源来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等,而在其支持上也更能体现出这些资源定义的优越性.比如通过Resour ...
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
- WPF学习拾遗(二)TextBlock换行
原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...
随机推荐
- unreal3控制台窗口属性调整
在windows平台上,unreal3的console窗口类是FOutputDeviceConsoleWindows 启动时,它可以从XXXGame.ini中读取诸如窗口大小之类的属性,具体的代码在 ...
- 5.6 安装Virtual box
本以为安装虚拟机很复杂的样子,经过kevin一指点,发现soeasy.废话少说,直接上图片: 将安装包放到自己的目录下: 安装完后,可以在搜索框中搜索:virtual 会出现安装好的虚拟机盒子.
- 网络应用(4):块的概念 | Range
分块来处理,也算是自然的想法,就是化整为零.而于对于文件的下载同样使用这个道理,既可整体下载,也可分块下载. 小程这里以http协议为例,来看一下块的概念与使用. http的range http1.0 ...
- Word课程笔记(秋叶系列课程)
课时010[视频]01 别说你会Word,你可能用错了! # 贯通三个核心: 大量重复的工作懂得批量处理:反复要做的固定操作固化成“模板”“套路”:碰到异常情况知道准确高效的解决: # 三个问题: 文 ...
- Nginx + Tomcat7 + redis session一致性问题
Nginx 作负载均衡时,由于是每次都需要把请求分发到不同的机器,同一个用户在一台机器上创建了 session,下一次的请求很有可能会转发到另外一台机器,会造成 session 丢失.我们可以使用 R ...
- flask数据操纵
Flask ORM 在Django框架中内部已经提供ORM这样的框架,来实现对象关系映射,方便我们操作数据库.如果想在Flask中也达到这样效果,需要安装一个第三方来支持. SQLAlchemy是一个 ...
- asddf
https://docs.saltstack.com/en/getstarted/fundamentals/index.html https://pypi.org/simple/cherrypy/ 安 ...
- 简单使用phpspider采集本博客文章内容
采集流程 根据链接获取页面内容(curl)->获取需要采集的内容(可以通过正则.xpath.css选择器等方法进行筛选) <?php require_once 'phpspider/aut ...
- spark_运行spark-shell报错_javax.jdo.JDOFatalDataStoreException: Unable to open a test connection to the given database.
error: # ./spark-shell Caused by: javax.jdo.JDOFatalDataStoreException: Unable to open a test connec ...
- ip route,ip rule, iptables和docker的端口映射
iptables 默认5个表, 不可增加其他表 raw 用于配置数据包,raw 中的数据包不会被系统跟踪. filter 是用于存放所有与防火墙相关操作的默认表. nat 用于 网络地址转换(例如:端 ...