Обычно вы можете делать такие вещи, используя IValueConverter
.
Когда вы создаете правильный конвертер, вы можете указать, использовать ли его для привязки в XAML.
Для части «в реальном времени», если вы правильно реализуете INotifyPropertyChanged в своем объекте DataContext, изменение переменной будет отражено в пользовательском интерфейсе с применением всех преобразователей значений, которые вы решили.ползунок, как вы сказали:
<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, который сопоставляет строковую переменную со значением 0-50-100 для соответствующих "lo", "med", ang "привет "струны.Конвертер объявлен как статический ресурс и используется в привязке.Код конвертера выглядит следующим образом:
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
}
}
Как вы, наверное, догадались, я написал его только в одном направлении, поэтому привязка не работает в обоих направлениях, но я уверен, что вы получили всю часть.