【发布时间】:2017-06-18 07:39:43
【问题描述】:
我正在开发一个 WPF 应用程序,其中用户可以在运行时更改语言(不是当前的文化!)。 所以我有多个 XAML 类型的资源字典,我在其中添加了文本,以使我的 WPF 应用程序像这样多语言:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:Validation_DataAnnotations2.Resources">
<system:String x:Key="firstname">First name</system:String>
<system:String x:Key="lastname">Last name</system:String>
<system:String x:Key="mainwindowtitle">Validation with DataAnnotations</system:String>
<system:String x:Key="german_language">German</system:String>
<system:String x:Key="english_language">English</system:String>
<system:String x:Key="insert_first_name">The first name has to be inserted</system:String>
</ResourceDictionary>
WPF 窗口和控件由窗口资源绑定。 但我正在使用 DataAnnotations 进行验证。 我的第一个想法是在我的视图模型中进行验证时将文本获取到键“insert_first_name”。 所以我试着用这个来得到它:
System.Windows.Application.Current.Resources.FindName("insert_first_name")
但是当我使用 FindName 方法时,我得到了 null。
当我尝试时
System.Windows.Application.Current.Resources.Contains("insert_first_name")
我得到“真”,这意味着密钥存在。
如何获取key的值?
protected void ValidateModel()
{
validationErrors.Clear();
ICollection<ValidationResult> validationResults = new List<ValidationResult>();
ValidationContext validationContext = new ValidationContext(personmodel, null, null);
if (!Validator.TryValidateObject(personmodel, validationContext, validationResults, true))
{
foreach (ValidationResult validationResult in validationResults)
{
string property = validationResult.MemberNames.ElementAt(0);
if (validationErrors.ContainsKey(property))
{
validationErrors[property].Add(validationResult.ErrorMessage);
}
else
{
validationErrors.Add(property, new List<string> { validationResult.ErrorMessage });
if (validationResult.ErrorMessage == "insert_first_name")
{
var text = System.Windows.Application.Current.Resources.FindName("insert_first_name");
}
}
}
}
// Raises the ErrorsChanged for all properties explicitly.
RaiseErrorsChanged("FirstName");
RaiseErrorsChanged("LastName");
}
【问题讨论】:
标签: c# wpf xaml dictionary