Для нового проекта мне недавно было предложено исследовать метод привязки информации, связанной с отображением пользовательского интерфейса, к бизнес-объектам в приложении WPF. Например, класс отчета:Определение свойств пользовательского интерфейса с использованием атрибутов
class ExecutionReport
{
[Displayable(Bold, Background=Color.Red)]
public String OrderId{get; private set;}
[Displayable(Normal, HAlignment=Center)]
public String Symbol {get; private set;}
// this should be hidden as it doesn't have DisplayableAttribute
public String ClientOrderId {get; private set;}]
[Displayable(Normal, HAlignment=Right,
Format("If [Position] < 0 then Background=Color.Red"),
Format("If [Position] > 0 then Background=Color.Lime"),
DisplayFormat("+#;-#;0")]
public Int Position {get; private set;}
}
Это совершенно новый подход для меня, как правило, в большинстве МОФ MVVM приложений я работал там было четкое разделение представления и ViewModel и я стараюсь как можно больше чтобы сохранить пользовательские пользовательские данные из виртуальной машины. Вместо этого я склоняюсь к написанию этого, используя ресурсные словари и простые конвертеры, применяемые к связям в слое представления.
Мои вопросы: Существуют ли какие-либо wpf/mvvm-рамки, которые используют этот вид реализации? Если так, мне любопытно посмотреть, как это будет достигнуто.
Есть ли очевидные подводные камни? Первые несколько вещей, которые приходят на мой взгляд, являются
Изменение уведомления (то есть. INotifyPropertyChanged, чтобы вызвать обновление зрения). Будет ли реализация этого намного сложнее?
Сложность в возможности использовать ресурсные словари для системных значений. Например, возможно, я хотел изменить цвет красного цвета, используемый во всем приложении. Я бы Ctrl + F через и найти все места в бизнес-объектах, где он был использован, и изменить его, вместо того, чтобы быть в состоянии изменить единый StaticResource
Невозможность использовать DesignTime DataContexts
Performance. Кажется, любит это требует интенсивного использования отражения, которое не может быть столь же производительным как типичные конвертеры значений
Я очень заинтересован, чтобы увидеть, если я правильно на второй и третьей точек или если обе эти вещи все еще может быть достигнуто?
В конечном итоге я чувствую, что это плохой дизайн, и я склоняюсь к написанию другой реализации, чтобы показать заинтересованной стороне, как я обычно подхожу к этой проблеме. Просто хочу убедиться, что я не пропущу что-то очевидное, что могло бы сделать это более элегантным.
AOP поддерживает отладку или все они сотканы после компиляции? – AwkwardCoder
@AwkwardCoder кажется, что вы можете это сделать: http://doc.postsharp.net/debugging – fex