![]()
<Window x:Class="WpfDemo.BindingConverterDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="BindingConverterDemo" Height="300" Width="300"
xmlns:local="clr-namespace:WpfDemo"
>
<Window.Resources>
<local:CategoryToSourceConverter x:Key="cts"></local:CategoryToSourceConverter>
<local:StateToNullableBoolConverter x:Key="snbc"></local:StateToNullableBoolConverter>
</Window.Resources>
<StackPanel>
<ListBox x:Name="listBox" Height="300">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="50" Height="50" Source="{Binding Path=category,Converter={StaticResource cts}}"></Image>
<TextBox Width="40" Text="{Binding Path=name}"></TextBox>
<CheckBox IsThreeState="True" IsChecked="{Binding Path=state,Converter={StaticResource ResourceKey=snbc}}"></CheckBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Height="19" Content="load" Click="Button_Click"></Button>
<Button Height="19" Content="save" Click="Button_Click_1"></Button>
</StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace WpfDemo
{
/// <summary>
/// BindingConverterDemo.xaml 的交互逻辑
/// </summary>
public partial class BindingConverterDemo : Window
{
public BindingConverterDemo()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
List<Beauty> list = new List<Beauty>() {
new Beauty(){ category=Category.御姐, name="西施", state=State.Availabel},
new Beauty(){ category=Category.御姐, name="貂蝉", state=State.Lock},
new Beauty(){ category=Category.御姐, name="苍老师", state=State.Unknoww},
new Beauty(){ category=Category.萝莉, name="罗拉前辈", state=State.Availabel},
new Beauty(){ category=Category.萝莉, name="小明", state=State.Lock},
new Beauty(){ category=Category.萝莉, name="杨幂", state=State.Unknoww},
};
this.listBox.ItemsSource = list;
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
StringBuilder sb = new StringBuilder();
foreach(Beauty b in listBox.Items)
{
sb.Append(string.Format("Category:{0},name:{1},State:{2};\n",b.category,b.name,b.state));
}
File.WriteAllText("D:\\tt.txt",sb.ToString());
}
}
public enum Category
{
御姐,萝莉
}
public enum State
{
Availabel,Lock,Unknoww
}
public class Beauty
{
public Category category {get;set;}
public string name {get;set;}
public State state {get;set;}
}
public class CategoryToSourceConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Category c = (Category)value;
switch(c)
{
case Category.御姐:
return @"\pic\御姐.jpg";
case Category.萝莉:
return @"\pic\萝莉.jpg";
default:
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class StateToNullableBoolConverter:IValueConverter
{
//從Source流向Target時
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
State s = (State)value;
switch(s)
{
case State.Availabel:
return true;
case State.Lock:
return false;
case State.Unknoww:
default:
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool? b = (bool?)value;
switch(b)
{
case true:
return State.Availabel;
case false:
return State.Lock;
case null:
default:
return State.Unknoww;
}
}
}
}