学习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;
}
}
}
 
CategoryToSourceConverter

 
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();
}
}
 
WindowConvertListItem xaml文件

 
<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>
 
WindowConvertListItem cs文件

 
/// <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());
}
}
class Plane

 
 /// <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)的更多相关文章

  1. WPF学习(8)数据绑定

    说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...

  2. WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决

    原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...

  3. WPF学习07:MVVM 预备知识之数据绑定

    MVVM是一种模式,而WPF的数据绑定机制是一种WPF内建的功能集,两者是不相关的. 但是,借助WPF各种内建功能集,如数据绑定.命令.数据模板,我们可以高效的在WPF上实现MVVM.因此,我们需要对 ...

  4. WPF学习(8)数据绑定 https://www.cnblogs.com/jellochen/p/3541197.html

    说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...

  5. 【WPF学习】第五十章 故事板

    正如上一章介绍,WPF动画通过一组动画类(Animation类)表示.使用少数几个熟悉设置相关信息,如开始值.结束值以及持续时间.这显然使得它们非常适合于XAML.不是很清晰的时:如何为特定的事件和属 ...

  6. WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)

    时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码)  已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...

  7. WPF学习05:2D绘图 使用Transform进行控件变形

    在WPF学习04:2D绘图 使用Shape绘基本图形中,我们了解了如何绘制基本的图形. 这一次,我们进一步,研究如何将图形变形. 例子 一个三角形,经Transform形成组合图形: XAML代码: ...

  8. WPF学习之资源-Resources

    WPF学习之资源-Resources WPF通过资源来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等,而在其支持上也更能体现出这些资源定义的优越性.比如通过Resour ...

  9. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  10. WPF学习拾遗(二)TextBlock换行

    原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...

随机推荐

  1. 20169201 2016-2017-2 实验二《Java面向对象程序设计》

    实验一:程序设计中临时变量的使用 代码托管 1.删除数组中的元素5 for(int i = 4; i < arr.length - 1; i ++){ arr[i] = arr[i + 1]; ...

  2. matlab基本语法和运算基础

    转载自:http://blog.csdn.net/robertcalm/article/details/51582253 matlab语法比较随意,但正如其全名 matrix &laborat ...

  3. 浅析C#中的事件

    讲过了委托,不得不讲事件. 事件基于委托,为委托提供了一种发布/订阅机制. 在发生其他类或对象关注的事情时,类或对象可通过事件通知它们.发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为 ...

  4. MATLAB求解非线性方程组

    matlab中有专门的solve函数来解决方程组的(a-x)^2+(b-y)^2=e^2(C-x)^2+(D-y)^2=v^2已知a,b,c,d,e,v 值求解 X,Y 请问用 matlab 如何写, ...

  5. 继承、super、this、抽象类

    继承.super.this.抽象类 继承.super.this.抽象类 继承.super.this.抽象类 继承.super.this.抽象类 继承.super.this.抽象类

  6. 洛谷P1967 货车运输

    题目描述 \(A\)国有\(n\)座城市,编号从\(1\)到\(n\),城市之间有\(m\)条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有\(q\)辆货车在运输货物, 司机们想知道每辆车在 ...

  7. Anywhere 随启随用的静态文件服务器

    三江建材官网项目 写nodeJs系列的文章都是因为这一个项目 第一天,搭建项目环境 记录心情: 首先,在写这个项目的时候,我很无助,只是拿到了设计稿,还有一个指导人,平常会很忙,只有在休闲的时候才能动 ...

  8. LeetCode初级算法(数组)解答

    这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...

  9. nagios部署配置流程

    nagios部署配置流程 nagios服务端:1.部署nagios服务端(参考nagios官方部署文档).nagios-plugin.php.apache2 2.需要在服务端添/etc/hosts中添 ...

  10. OpenLayers v4.2.0 -----地图延迟加载;

    官方:http://openlayers.org/en/latest/examples/lazy-source.html <!DOCTYPE html> <html> < ...