Converter:(这里实现的是将数字(默认)转换为MHz)
public class FreqConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { long tmp = (long)value; double ret = tmp / 1000000.0; return ret.ToString() + "MHz"; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { string tmp = (string)value; if (tmp.Length<3) { return null; } string ret = tmp.Substring(0, tmp.Length - 3); if (ret =="") { return 0L; } string unit = tmp.Substring(tmp.Length - 3, 3); switch (unit.ToLower()) { case "mhz": return (long)(Double.Parse(ret) * 1000000); default: break; } return null; } }
Model层:
public class Data : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void RaisePropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } private long mFrequency; public long Frequency { get { return mFrequency; } set { mFrequency = value; RaisePropertyChanged("Frequency"); } } }
因为我不打算做交互所以没有ViewModel层;
直接出View层:
<Window.Resources> <local:FreqConverter x:Key="myFreqConverter"/> </Window.Resources> <Window.DataContext> <local:Data/> </Window.DataContext> <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid Margin="0"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label Content="{Binding Frequency, Converter={StaticResource myFreqConverter} }"/> <Label Content="{Binding Frequency}" Grid.Column="1" /> </Grid> <TextBox Grid.Row="1" TextWrapping="Wrap" Text="{Binding Frequency, Converter={StaticResource myFreqConverter},ConverterParameter=123, UpdateSourceTrigger=PropertyChanged}"/> </Grid>
效果图: