1,使用Binding.Format属性简易设置绑定的属性数据显示格式。
<TextBox Grid.Row="2" Grid.Column="1">
<TextBox.Text>
<Binding Path="UnitCost" StringFormat="{}{0:C3}" >
</Binding>
</TextBox.Text>
</TextBox>
语法解析:
StringFormat="{}{0:C3}" :第一个{}表示转义标识,StringFormat以花括号开头的需要在表达式{0:C}前加上花括号进行标识转义否则xaml无法识别{0:C},但是如果以字符开头则可以省略用于转义标识的花括号,例如Binding.StringFormat=Value{0:C},此处就进行了省略。
显示效果:自动添加货币符,并显示指定的3位小数位数。
常用格式字符:
2,使用实现IValueConverter的值转换类。
Binding.StringFormat={}{0:C3}同等效果的值转换类
class CustomValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return string.Format(culture, "{0:C3}", value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return decimal.Parse(value.ToString(), NumberStyles.Any, culture);
}
}
在xaml中添加转换类对象。
<TextBox Grid.Row="2" Grid.Column="1">
<TextBox.Text>
<Binding Path="UnitCost" >
<Binding.Converter>
<local:CustomValueConverter></local:CustomValueConverter>
</Binding.Converter>
</Binding>
</TextBox.Text>
</TextBox>
3,使用MultiBinding.StringFormat组合多个属性。
<TextBlock Grid.Row="3" Grid.Column="1">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0},{1}">
<Binding Path="ModelName"></Binding>
<Binding Path=" ModelNumber"></Binding>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
显示效果:
4,使用实现IMultiValueConverter的值转换类。
实现与MultiBinding.StringFormat="{}{0},{1}"同等转换效果。
class CustomMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
string modelName = values[0].ToString();
string modelNumber = values[1].ToString();
return string.Format("{0},{1}", modelName, modelNumber);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return null;
}
}
<TextBlock Grid.Row="3" Grid.Column="1">
<TextBlock.Text>
<MultiBinding >
<MultiBinding.Converter>
<local:CustomMultiValueConverter></local:CustomMultiValueConverter>
</MultiBinding.Converter>
<Binding Path="ModelName"></Binding>
<Binding Path=" ModelNumber"></Binding>
</MultiBinding>
</TextBlock.Text>
</TextBlock>