2013-11-28 2 views
1

У меня есть приложение WPF, где я устанавливаю некоторые comboboxes в конструкторе ViewModel. Я заполняю comboboxes, а затем настраиваю CurrentChanged EventHandler, но каждый раз, когда представление загружает это событие, запускается. Я хотел бы иметь возможность остановить событие CurrentChanged при загрузке.WPF CollectionView.CurrentChanged срабатывание события при загрузке

Вот мой конструктор ViewModel.

public MyViewModel() 
    { 
     this.Initialize(); 
     carNames = new CollectionView(GetCarNames());//method that returns a List<string> collection 
     companyNames = new CollectionView(GetCompanyNames());//method that returns a List<string> collection 
     carNames.CurrentChanged += new EventHandler(carNames_CurrentChanged); 
     companyNames.CurrentChanged += new EventHandler(companyNames_CurrentChanged); 
    } 

И вот один из моих EventHandlers.

void carNames_CurrentChanged(object sender, EventArgs e) 
    { 
     if ((sender as CollectionView).CurrentItem != null) 
     { 
      //Do Something   
     } 
    } 

И, наконец, вот мой комбобокс на мой взгляд.

<ComboBox Margin="5" 
     SelectedValue="{Binding Path=SelectedCar}" 
     ItemsSource="{Binding carNames}" 
     IsSynchronizedWithCurrentItem="True" 
     x:Name="cmbCar" /> 

Так что мой вопрос! Как я могу предотвратить запуск моего EventHandler при загрузке представления.

Любая помощь приветствуется.

Cheers.

Noel

ответ

1

Для того, чтобы избежать обработчик вызывается при загрузке вы должны убедиться, что он установлен после загрузки вид. Как создается ваш ViewModel? Если это соответствует вашему дизайну, вы можете создать его после загрузки представления, хотя я бы не рекомендовал эту опцию.

Лучшая опция - хотя и не очень изящная, может быть привязка (OneWayToSource) к свойству ComboBox.IsLoaded и установка обработчиков при изменении свойства привязки ViewModel к true.

В качестве альтернативы вы не могли бы просто следить за изменением свойства SelectedCar и выполнять свою логику?

+0

Я думал о просмотре изменений в свойстве SelectedCar, но думал, что у меня просто отсутствует что-то, что может легко предотвратить запуск EventHandler. Я буду использовать свойство SelectedCar для проверки изменений. Приветствия. – Nollaig

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