2013-02-12 3 views
0

У вас есть небольшая проблема с подключением события keydown без кода! Итак, у нас есть выпадающийПодключить ключ в TextBox (MVVM)

<ComboBox Height="20" Width="auto" 
        ItemsSource="{Binding AlignComboItems}" 
        SelectedValue="{Binding SelectedComboItem, Mode=TwoWay}" 
        SelectedValuePath="Key" DisplayMemberPath="Value" 

        SelectedItem="{Binding SelectedItem}" 
        x:Name="cmbBoxAlign"> 
</ComboBox> 

и некоторые TextBox.

<TextBox Text={Binding SomeSource}></TextBox> 

Как поймать KeyDown событие на TextBox для выбора (например) последнего элемента в ComboBox? Я не могу использовать свойство TextBox DataSource, потому что нужно зацепить пользователя.

ответ

3

Если вы не против установки Expression Blend SDK, вы должны быть в состоянии сделать это в текстовом поле

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="KeyUp"> 
     <i:InvokeCommandAction Command="{Binding Path=TheCommand}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

После добавления ссылки на System.Windows.Interactivity и следующее пространство имен в вашем XAML

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 

Ссылка на Expression SDK для 4.0

http://www.microsoft.com/en-us/download/details.aspx?id=10801

+0

Кроме того, есть много инфраструктур MVVM, которые их используют для этого, если они используются? –

+0

Спасибо, я думаю, что это самый простой способ. –

0

Если вы хотите иметь код огонь в вашей модели представления каждый раз, когда есть ключ вниз в текстовом поле необходимо изменить связывание незначительно:

<TextBox Text="{Binding SomeSource, UpdateSourceTrigger=PropertyChanged}" 

Тогда в модели представления сеттер будет :

private string _someSource; 
public string SomeSource{ 
    get { return _someSource; } 
    set { 
    //this will fire on key down 
    _someSource= value; 
    //based off the value you can set SelectedComboItem accordingly 
    OnPropertyChanged("SomeSource"); 
    } 
} 

Кроме того, убедитесь, что у вас установлена ​​функция INotifyPropertyChanged.

+0

Таким образом, он будет меняться все время, даже DataSource был изменен программно не пользователем! –

+0

А я вижу, я не понял, что от вас вопрос. Да, это срабатывает, даже если значение будет изменено программно. –

+0

Мне нужно, чтобы он срабатывал только тогда, когда пользовательский тип smth) –

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