我正在构建一个可以跟踪体重的应用程序。我允许用户选择他们的单位首选项kg或lbs。我希望将数据保存在DB标准( kg )中,因此如果用户选择lbs作为他们的首选项,我需要在UI中将数据从kg转换为lbs。
发布于 2011-06-08 01:52:11
我能解释的最好的方法就是使用一个自定义的转换器接口。我不会继续讲下去,而是给你举个例子。
    private IConverter<Double, Double> weightConverter = new KgToLbsConverter();
    private double _weight;
    public double Weight
    {
        get
        {
            return weightConverter.ConvertFrom(_weight);
        }
        set
        {
            _weight = weightConverter.ConvertTo(value);
            RaisePropertyChanged(() => Weight);
        }
    }
    /// <summary>
    /// Provides a simple converter contract.
    /// </summary>
    /// <typeparam name="T">The source Type</typeparam>
    /// <typeparam name="R">The target Type.</typeparam>
    public interface IConverter<T, R>
    {
        R ConvertFrom(T value);
        T ConvertTo(R value);
    }
    /// <summary>
    /// Provides a converter to change Kg to Lbs and vice versa
    /// </summary>
    public class KgToLbsConverter : IConverter<Double, Double>
    {
        /// <summary>
        /// From Kg to Lbs.
        /// </summary>
        /// <param name="value">The weight in Kg.</param>
        /// <returns>The weight in Lbs.</returns>
        public double ConvertFrom(double value)
        {
            return value / 2.2;
        }
        /// <summary>
        /// From Lbs to Kg.
        /// </summary>
        /// <param name="value">The weight in Lbs.</param>
        /// <returns>The weight in Kg.</returns>
        public double ConvertTo(double value)
        {
            return value * 2.2;
        }
    }使用这个,你可以制作任何你想要的转换器,然后让用户从具体的实现中进行选择。
注意:相对于转换器,我更喜欢这种模式的原因是视图模型可能需要知道什么转换模式是活动的,以及如何使用它们,这增加了相当多的灵活性。当您需要对V-VM关系进行单一转换时,IValueConverter是可行的方法,但对于您的场景,这更易于维护和扩展。
https://stackoverflow.com/questions/6269267
复制相似问题