Передача информации о состоянии из представления в viewmodel - PullRequest
3 голосов
/ 11 августа 2011

Каков наилучший подход для передачи текущего состояния модели представления - в частности, какое текстовое поле имеет фокус - обратно в модель представления?

Мое требование для контекстно-ориентированного поиска, в зависимости от того, какое текстовое поле имеет фокус, определяет, какое поле искать в базе данных.

Я использую шаблон MVVM и действительно не хочу помещать какой-либо код в представление.

Ответы [ 4 ]

2 голосов
/ 11 августа 2011

создайте вложенное свойство для TextBox, которое является IsFocussed свойством. Затем используйте двухстороннюю привязку к вашему ViewModel

1 голос
/ 11 августа 2011

Вы можете использовать InvokeCommandAction, доступный в Expression Blend SDK:

    <StackPanel>
    <TextBox>
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="GotFocus">
                <i:InvokeCommandAction Command="{Binding YourCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TextBox>
    </StackPanel>

Где:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
1 голос
/ 11 августа 2011

Вы не хотите помещать связанные с просмотром вещи в вашу виртуальную машину.Фокус четко просматривать связанные вещи.В виртуальной машине вы должны отслеживать текущее выбранное поле поиска в некотором привязываемом свойстве.Изменение фокуса в представлении должно как-то обновить текущее свойство.Я не вижу проблемы с кодом в представлении, что было бы самым простым способом отслеживания фокуса и обновления виртуальной машины.Если вы не хотите выполнять код, то это также можно сделать с помощью преобразователей значений или прикрепленного поведения.

0 голосов
/ 11 августа 2011

Я действительно не вижу способа сделать это без легкого нарушения контракта View-ViewModel (т. Е. ViewModel является независимой от View). Вы можете использовать System.Windows.Input Keyboard.FocusedElement, а затем получить привязку данных этого элемента, чтобы выполнить поиск по команде поиска в ViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...