首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MVVM模式中转换值(kg到lbs)

在MVVM模式中转换值(kg到lbs)
EN

Stack Overflow用户
提问于 2011-06-08 01:31:55
回答 4查看 994关注 0票数 2

我正在构建一个可以跟踪体重的应用程序。我允许用户选择他们的单位首选项kg或lbs。我希望将数据保存在DB标准( kg )中,因此如果用户选择lbs作为他们的首选项,我需要在UI中将数据从kg转换为lbs。

EN

Stack Overflow用户

发布于 2011-06-08 01:52:11

我能解释的最好的方法就是使用一个自定义的转换器接口。我不会继续讲下去,而是给你举个例子。

代码语言:javascript
运行
复制
    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是可行的方法,但对于您的场景,这更易于维护和扩展。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6269267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档