Я нашел, что XSLT является довольно трудным работать с.
у меня был опыт при работе над системой, несколько подобной той, которую Вы описываете. Моя компания отметила, что данные, которые мы возвращали из "среднего уровня", были в XML, и что страницы должны были быть представлены в HTML, который мог бы также быть XHTML, плюс они услышали, что XSL был стандартом для преобразования между форматами XML. Так "архитекторы" (которым я имею в виду людей, которые думают глубокие мысли дизайна, но по-видимому никогда не кодируют), решил, что наш передний уровень будет реализован путем записи сценариев XSLT, которые преобразовали данные в XHTML для дисплея.
выбор оказался имеющим катастрофические последствия. XSLT, это складывается, является болью для записи. И таким образом, все наши страницы было трудно записать и поддержать. Мы сделали бы намного лучше для использования JSP (это было в Java), или некоторый аналогичный подход, который использовал один вид разметки (угловые скобки) для выходного формата (HTML) и другой вид разметки (как < %... %>) для метаданных. Самая запутывающая вещь о XSLT состоит в том, что он записан в XML, и он переводит от XML до XML..., довольно трудно сохранить все 3 различных XML-документа прямо в уме.
Ваша ситуация немного отличается: вместо того, чтобы создать каждую страницу в XSLT, как я сделал, только необходимо записать один бит кода в XSLT (код для преобразования из шаблонов для отображения). Но это кажется, что Вы, возможно, столкнулись с тем же видом трудности, которую я сделал. Я сказал бы, что попытка интерпретировать простой основанный на XML DSL (предметно-ориентированный язык) как Вы делает, не одна из сильных сторон XSLT. (Хотя это, CAN делает задание..., в конце концов, это полно по Тьюрингу!)
Однако, если то, что Вы имели, было более простым: у Вас есть данные в одном формате XML и требуемый для создания простых изменений к нему - не полностраничное описание DSL, но некоторые простые простые модификации, тогда XSLT является превосходным инструментом с этой целью. Это декларативно (не процедурный), природа является на самом деле преимуществом с этой целью.
- Michael Chermside
Some comments:
Like adrianm said, when you trigger your animation off a bool property you are actually responding to an event. Specifically the event PropertyChanged
which the WPF subsystem. Which is designed to attach/detach correctly to/from so that you don't leak memory (you may forget to do this when wiring an event yourself and cause a memory leak by having a reference active to an object which otherwise should be GCed).
This allows you to expose your ViewModel as the DataContext
for the control and respond correctly to the changing of properties on the datacontext through databinding.
MVVM is a pattern that works particularly well with WPF because of all these things that WPF gives you, and triggering off a property change is actually an elegant way to use the entire WPF subsystem to accomplish your goals :)
Более общий вопрос, который следует задать: «Почему я пытаюсь обработать это событие в моей ViewModel?»
Если ответ имеет какое-либо отношение к вещам, предназначенным только для просмотра, таким как анимация, я бы сказал, что ViewModel не должен знать об этом: код позади (при необходимости), Data / Event / PropertyTriggers и новые конструкции VisualStateManager будут служить вам намного лучше и поддерживать четкое разделение между View и ViewModel.
Если что-то должно «произойти» в результате события, то вы действительно хотите использовать шаблон Command - либо используя CommandManger, обрабатывая событие в программном коде и вызове команды в модели представления или с помощью прикрепленных поведений в библиотеках System.Interactivity.
В любом случае вы хотите, чтобы ваша ViewModel оставалась «чистой» как вы можете - если вы видите там что-то, относящееся к View, вы, вероятно, делаете это неправильно. :)