IValueConverter:简易实现——数字(Hz) 转 Mhz

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>

效果图:

猜你喜欢

转载自www.cnblogs.com/bug01/p/10951051.html
MHZ