目录
2.2 多值转换接口IMultiValueConverter
1、数据绑定
1.1 定义
Windows Presentation Foundation (WPF) 数据绑定为应用程序呈现数据并与数据交互提供了一种简单且一致的方式。数据绑定是在应用程序 UI 和业务逻辑之间建立连接的过程。
1.2 绑定语法
1.2.1 标记扩展使用
1.2.1 对象元素语法
1.3 绑定数据源类型
常用的类型有:
对象类型 |
描述 |
公共语言运行时 (CLR) 对象 |
可以绑定到任何 公共语言运行时 (CLR) 对象的公有属性、子属性以及索引器 |
动态对象 |
可以将绑定到可用的属性和索引器的实现的对象IDynamicMetaObjectProvider接口。如果可以访问代码中的成员,则可以绑定到该成员。 例如,如果动态对象使用户可以通过 someObjet.AProperty 访问代码中的成员,则可以通过将绑定路径设置为 AProperty 来绑定到该成员。 |
ADO.NET 对象 |
可以将绑定到ADO.NET对象,如DataTable。 |
XML 对象 |
你可以将绑定到并运行XPath查询上XmlNode, XmlDocument,或XmlElement。 |
可以绑定到的任何依赖项属性DependencyObject。 |
DependencyObject对象是指类似于Button、Lable等这些继承了DependencyObject类的类对象。此类型常用于控件与控件之间的绑定,例如:
1.4 绑定数据流方向
数据流方向:
示例:
1.5 绑定到集合
绑定到一个集合,使用派生自ObservableCollection<T>类,它是一个集合类,可在添加或删除项时提供通知。
代码:
public class CollectionSource : ObservableCollection<Item>
{
public CollectionSource() : base()
{
Add(new Item() { DM = "0", MC = "默认" });
Add(new Item() { DM = "1", MC = "类型一" });
Add(new Item() { DM = "2", MC = "类型二" });
}
}
public class Item
{
public string MC { get; set; }
public string DM { get; set; }
public override string ToString()
{
return MC;
}
}
XAML:
<Window.Resources>
<local:CollectionSource x:Key="myItemsSource"/>
</Window.Resources>
<ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="10,134,0,0" VerticalAlignment="Top" Width="186"
ItemsSource="{Binding Source={StaticResource myItemsSource}}" />
2、数据转换接口
2.1 单值转换接口IValueConverter
在使用枚举、布尔、日期、字典类型的情况下,UI元素显示的内容需要对绑定的数据类型进行转译。
示例:
对字典类型的数据定义了个基类,是具体使用的地方就不用写那么多代码了:
public class DictionaryConverter<T1, T2> : IValueConverter
{
protected Dictionary<T1, T2> m_DicDataItems;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (m_DicDataItems.Keys.Contains((T1)value))
{
return m_DicDataItems[(T1)value];
}
return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (m_DicDataItems.Values.Contains((T2)value))
{
return m_DicDataItems.Keys.First((key) => m_DicDataItems[key].Equals((T2)value));
}
return DependencyProperty.UnsetValue;
}
}
应用代码:
public class ConverterClass : DictionaryConverter<string, string>
{
public ConverterClass()
{
m_DicDataItems = new Dictionary<string, string>();
m_DicDataItems.Add("1", "那是1");
m_DicDataItems.Add("2", "那是2");
m_DicDataItems.Add("3", "那是3");
}
}
XAML:
2.2 多值转换接口IMultiValueConverter
当界面元素由数据源多个属性共同确定时需要用到多值转换,譬如控件的背景色由绑定对象的R、G、B三个属性确定。
示例:
public class BrushSource
{
private int m_R = 50;
private int m_G = 120;
private int m_B = 30;
public int R
{
get
{
return m_R;
}
set
{
m_R = value;
}
}
public int G
{
get
{
return m_G;
}
set
{
m_G = value;
}
}
public int B
{
get
{
return m_B;
}
set
{
m_B = value;
}
}
}
UI:背景色
2.3 转换版本属性ValueConversion
用于指定转换的类型。
[ValueConversion(typeof(Color), typeof(SolidColorBrush))]
public class ColorBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Color color = (Color)value;
return new SolidColorBrush(color);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
参考地址:
https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/index