您通常可以使用IValueConverter 来执行此类操作。
当您创建适当的转换器时,您可以指定将其用于 XAML 中的绑定。
对于“实时”部分,只要您在 DataContext 对象中正确实现 INotifyPropertyChanged,修改变量将反映在 UI 上,应用您决定的所有值转换器。让我们举一个使用滑块的示例你说:
<Window x:Class="Example.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Example"
Title="MainWindow" Height="350" Width="525"
>
<Window.Resources>
<local:HMLConverter x:Key="hiloConverter"></local:HMLConverter>
</Window.Resources>
<Slider Value="{Binding MyValue, Converter={StaticResource hiloConverter}}" Maximum="100" Minimum="0"/>
</Window>
我创建了一个名为 HMLConverter 的小转换器,它将一个字符串变量映射到相应的“lo”、“med”、ang“hi”字符串的值 0-50-100。转换器被声明为静态资源,并在绑定中使用。转换器代码如下:
namespace Example
{
public class HMLConverter:IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string val = value.ToString();
int ret = 0;
switch (val.ToLower())
{
case "hi":
ret = 100;
break;
case "lo":
ret = 0;
break;
case "med":
ret=50;
break;
default:
throw new NotSupportedException("Value " + val + " is not supported");
}
return ret;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
}
正如你可能猜到的那样,我只写了一个方向,所以绑定不能双向工作,但我相信你得到了整个部分。