2012-12-18 83 views
4

在我的Windows應用商店(地鐵)的應用程序DataAnnotations我使用DataAnnotations我的對象使用「ErrorMessageResourceType」。一切正常。如何在Windows應用商店(地鐵)的應用程序

現在我嘗試我的琴絃放入Resource.resw文件。 的DataAnnotations需要2個屬性來填充:ErrorMessageResourceNameErrorMessageResourceType。如何將ErrorMessageResourceType與新的資源類型一起使用?

public class Person : Entity 
{ 
    private string _firstName; 

    [Required(ErrorMessageResourceName = "GenericFieldRequired", ErrorMessageResourceType = typeof(???))] 
    public string FirstName { 
     get { return _firstName; } 
     set { SetPropertyChanged(ref _firstName, value, this); } 
    } 
} 

有什麼建議嗎?

UPDATE: 我發現一個Visual Studio工具自動生成Resources.cs文件:

Resw Generator

回答

7

很多挖我想我明白爲什麼你的問題後。

在其他項目類型的資源文件會自動轉換爲靜態方法的類叫做資源鍵的名稱。

沒有辦法真正來自動執行此操作,所以我寫了一個T4模板,可以幫你出這一點。

<#@ template debug="false" hostspecific="True" language="C#" #> 
<#@ assembly name="System.Core" #> 
<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Text" #> 
<#@ import namespace="System.Xml" #> 
<#@ assembly name="System.Xml" #> 
<#@ import namespace="System.IO" #> 
<#@ import namespace="System.Collections.Generic" #> 
<#@ output extension=".cs" #> 
using Windows.ApplicationModel.Resources; 
<# 
    var namespaceName = System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("NamespaceHint"); 
#> 
namespace <#= namespaceName #> 
{ 
    public class ResourceHelper 
    { 
     private static readonly ResourceLoader resourceLoader = new ResourceLoader("Resources"); 
<# using (XmlReader reader = XmlReader.Create(Host.ResolvePath("Resources.resw"))) 
     { 
      bool found=reader.ReadToFollowing("data"); 
      while(found) 
      { 
       reader.MoveToFirstAttribute(); 
       string name = reader.Value;  

#> 
      public static string <#= name #> 
      { 
       get 
       { 
        return resourceLoader.GetString("<#= name #>"); 
       } 
      } 
<# 
       found=reader.ReadToFollowing("data"); 
      } 
     }#> 

    } 
} 

如果您放置在同一個文件夾中的模板資源文件,會輸出一個名爲ResourceHelper.cs。這然後可以在你的對象模型中使用: -

[Required(ErrorMessageResourceName = "validation_string", ErrorMessageResourceType = typeof(ResourceHelper))] 

注意有一些限制。首先,我對T4模板並不擅長,所以代碼可能會大大改善。現在,你必須確保你給你的資源會導致一個有效方法名稱的名稱 - 不要把空間在那裏!

其次,當您在資源文件中添加新的鍵/值時,模板不會自動生成,您必須進入模板並點擊保存。

除此之外,它應該正常工作 - 希望它有幫助!

+0

這是一個很好的解決問題的方法。非常感謝你。我沒有想到這一點。有一些小問題,但我可以自己解決。現在將深入研究T4語法。 – Flynn

相關問題