0

我有 2 个显示模板,它们在几行上具有相同的代码。

有没有办法将公共代码移动到另一个文件并在两个模板中引用该文件?

例如:

显示模板#1 和#2 具有以下通用代码:

IFormatProvider formatProvider = System.Globalization.CultureInfo.CurrentCulture;
string formattedCurrency = null;

if (formatProvider.ToString().Equals("en-US"))
{
    formattedCurrency = (@Model < 0 ? @Model.ToString("C", formatProvider) : (@Model).ToString("C", formatProvider));
}
else
{
    formattedCurrency = (@Model < 0 ? "- " + @Math.Abs(@Model).ToString("C", formatProvider) : (@Model).ToString("C", formatProvider));
}

如何将其移动到单独的文件并从两个模板中引用它?

4

1 回答 1

0

所以我的第一个选择是将formattedCurrency道具作为一个通用功能:

public class LocalizedViewModel {
   private IFormatProvider formatProvider;
   public float Currency { get; set; }
   public string FormattedCurrency () {
     if (formatProvider.ToString().Equals("en-US"))
     {
         return  (this.Currency < 0 ? this.Currency.ToString("C", formatProvider) : (this.Currency).ToString("C", formatProvider));
     }
     else
     {
         return (this.Currency < 0 ? "- " + Math.Abs(this.Currency).ToString("C", formatProvider) : (this.Currency).ToString("C", formatProvider));
     }
   }
  public LocalizedViewModel () {
    formatProvider = System.Globalization.CultureInfo.CurrentCulture;
  }
}

然后从这个基本模型继承两个 ViewModel

public class MyModel1: LocalizedViewModel {
   public MyModel1() : base() {
   }
}

public class MyModel2: LocalizedViewModel {
   public MyModel2() : base() {
   }
}

然后每次创建对象时,您都可以访问此道具:

var myModel = new Model1();
var myModel2 = new Model2();
myModel.Currency = 100;
myModel2.Currency = 200;

现在,两个视图模型都将具有 formattedCurrency 以显示在任何视图上,而无需任何额外的视图逻辑。希望这对您有所帮助,并且可能是一个可行的选择。

myModel.FormattedCurrency();
myModel2.FormattedCurrency();

并在任何模板上呈现该属性。同样,这是实现相同结果的替代解决方案。但采用不同的方法。

问候

于 2017-03-20T21:55:41.397 回答