2011-01-10 4 views
1

Я работаю над настраиваемой структурой проверки для моего приложения WPF/C#.Назначение типа времени компиляции

Что я хочу сделать, это извлечь строки из файла ресурсов, где объявлена ​​модель представления, но в самом действительном коде проверки. Эта конкретная строка - это тот же ресурс, который используется меткой в ​​редакторе пользовательского интерфейса.

Мой код отлично работает со следующим синтаксисом -

[Required(TypeRes = typeof(Resources))] 
    public string RequiredStringWithDesc { get; set; } 

Но то, что я "м ищет что-то, что является syntacticly чище, глядя Я пытался использовать

const Type LocalRes = typeof(Resources); 
    [Required(TypeRes = LocalRes)] 
    public string RequiredStringWithDesc { get; set; } 
.

Любые предложения по более простому синтаксису? Старая инструкция C++ DEFINE здесь будет работать хорошо.

FYI: причины для этой большой работы связаны с тем, как мы делаем локализацию и построение пользовательского интерфейса.


EDIT Чтобы ответить на несколько вопросов о том, почему мы это делаем? Мы будем использовать ту же строку из файла ресурсов в -

  1. На экране редактирования, это метка для идентификации поля.
  2. В datamodel, если есть ошибка проверки, мы используем это для правильной маркировки проблемы в файле журнала.
  3. В Viewmodel мы повторно используем эту метку в сообщении об ошибке проверки, чтобы усилить, где проблема для пользователя.
  4. Это часть системы контроля в реальном времени, и некоторые из режимов отказа относятся непосредственно к этим полям данных. Таким образом, мы можем легко получить правильно локализованную метку для применения к сообщениям о неисправностях во время работы.

Общая концепция заключается в том, что это упрощает представление согласованных сообщений пользователю, только создавая вещи один раз. Что касается атрибутов проверки (и этого вопроса), мы должны иметь возможность получить тип файла ресурсов для загрузки правильного сообщения.

+1

Я немного смущен, почему вы должны это делать вообще (я имею в виду, я не понимаю, почему встроенной системы локализации недостаточно). Не могли бы вы немного объяснить, что хотите? –

+0

Я думаю, что вы слишком много сделали ... – NotMe

+0

Почему вам нужно знать тип во время компиляции ... разве это не достаточно во время выполнения? –

ответ

0

Создайте новый класс атрибутов, который наследует от RequiredAttribute и устанавливает значения по умолчанию.

public class LocalizedRequiredAttribute : RequiredAttribute { 
    public LocalizedRequiredAttribute() { /* TypeDef = typeof(Resources);*/ } 
} 

public class MyModel { 
    [LocalizedRequired] 
    public string RequiredStringWithDesc { get; set; } 
} 
+0

Очень простая идея, нравится. Попробуем это утром. –

Смежные вопросы