2015-04-29 4 views
0

Интересно, как можно связать Window.Effect с ViewModel так, чтобы это могло быть как ViewModel, управляющим видом окна.Bind Window.Effect to ViewModel

Я знаю, что мы можем связывать свойства один за другим, например следующие; однако это не является обязательным. Effect скорее связывает настройки с Effect, что не представляет для меня интереса.

<Window.Effect> 
    <BlurEffect Radius="{Binding UIElementEffect.Radius}" /> 
</Window.Effect> 
+0

Здесь есть действительно интересная беседа об этом: http://stackoverflow.com/questions/1896612/are-wpf-related-properties-inside-a-viewmodel-a-violation-of-mvvm-best -практики. Суть его в том, что, вероятно, это плохая идея поместить фактический объект пользовательского интерфейса в ваш ViewModel, но вы можете использовать абстракцию одного и запустить его через конвертер, чтобы заполнить свойства вашего эффекта. – goobering

+0

Вы можете делать все, что хотите, но если вы выполняете задачи пользовательского интерфейса на своей виртуальной машине, это не MVVM. – Will

+1

@ Не согласен. VM - это модель представления (модель окна или модели другого элемента пользовательского интерфейса), она должна «выполнять задачи пользовательского интерфейса». – romanoza

ответ

1

Почему просто не связываться, как это:

<Window 
    ... 
    Effect ="{Binding WindowEffect}"> 

?

Что касается «если это плохая идея поставить WPF/объект пользовательского интерфейса специфичные в ViewModel» и другие «передовых методов» и модели я лично есть правило: я спрашиваю себя:
- Что реальная проблема будет я получить, если я нарушу эту лучшую практику (кстати, лучшие практики всегда лучшие и лучшие для всех?;))? Реально я имею в виду реальные - не теоретические проблемы, которые кто-то написал в книге или на каком-то форуме. Будут ли эти проблемы применяться для моего конкретного проекта? Какова вероятность того, что эта проблема действительно произойдет? Недостатки (проблемы, которые на самом деле никогда не возникают) перевешивают преимущества нарушения «лучшей практики» (например, простота, удобство работы с кодом и т. Д.)?
Я не предлагаю нарушать лучшие практики, я предлагаю не слепо следовать за ними.