SelectionChanged, a MVVM w aplikacji uniwersalnej.

0

Witam. Mam nadzieję, że to już mój ostatni problem na jakiś dłuższy czas :P
Nie mam pojęcia jak "użyć" zdarzenia "SelectionChanged" w MVVM, Command nie mogę zrobić, bo to comboBox.

<ComboBox x:Name="Menu_comboBox">
            <ComboBoxItem Name="ComboBoxItem1" Content="a"/>
            <ComboBoxItem Name="ComboBoxItem2" Content="b"/>
            <ComboBoxItem Name="ComboBoxItem3" Content="c"/>
        </ComboBox>

Jak rozwiązać ten problem ? Czytałem o jakiś rozwiązaniach, ale wymagają dodatkowych bibliotek, które chyba są dostępne tylko dla WPF...

0

Binduj SelectedItem do ViewModelu.

0

Robiłem tak, ale nie działa to tak jak ja chce. Ja potrzebuje "wychwycić" zdarzenie kliknięcia na item w comboboxie, a później sprawdzić, który to i wykonać stosowne akcje.

PS: Właściwie to potrzebuje tylko akcji typu "Click" na combobox, po zaznaczeniu. Potem już mogę sobie sprawdzać, który jest zaznaczony normalnie bindując.

W code-behind, byłoby tak:

private void Menu_comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
           if(item.IsSelected){//cośtam}
        }

i w xaml tylko:

SelectionChanged="Menu_comboBox_SelectionChanged"
0

Dlaczego Bindowanie nie zadziałało ?

0
Zdziwiony napisał(a):

Robiłem tak, ale nie działa to tak jak ja chce. Ja potrzebuje "wychwycić" zdarzenie kliknięcia na item w comboboxie, a później sprawdzić, który to i wykonać stosowne akcje.

PS: Właściwie to potrzebuje tylko akcji typu "Click" na combobox, po zaznaczeniu. Potem już mogę sobie sprawdzać, który jest zaznaczony normalnie bindując.

W code-behind, byłoby tak:

private void Menu_comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
           if(item.IsSelected){//cośtam}
        }

i w xaml tylko:

SelectionChanged="Menu_comboBox_SelectionChanged"

Taki efekt uzyskasz bardzo łatwo bez korzystania z MVVM Light :

       <ComboBox x:Name="Menu_comboBox" Height="50" >
            <ComboBoxItem Name="ComboBoxItem1" Content="a" IsSelected="{Binding IsSelectedA}"/>
            <ComboBoxItem Name="ComboBoxItem2" Content="b" IsSelected="{Binding IsSelectedB}"/>
            <ComboBoxItem Name="ComboBoxItem3" Content="c" IsSelected="{Binding IsSelectedC}"/>
        </ComboBox>
        public bool IsSelectedA
        {
            set{if (value == true) MessageBox.Show("A"); OnPropertyChange();}
        }

       
        public bool IsSelectedB
        {
            set{ if (value == true) MessageBox.Show("B"); OnPropertyChange();}
        }

       
        public bool IsSelectedC
        {
            set{ if (value == true) MessageBox.Show("C"); OnPropertyChange(); }
        }
0

Nie wiem dlaczego to robicie tak na około, @UnlimitedPL napisał jak zrobić to najprościej.

0
cSharpKazik napisał(a):

Nie wiem dlaczego to robicie tak na około, @UnlimitedPL napisał jak zrobić to najprościej.

Właściwie to się z Tobą zgadzam ale Zdziwiony potrzebował do czegoś sprawdzić warunek IsSelected dla tego zasugerowałem takie rozwiązanie.

0

Bindowanie do SelectedItems to jeden ze sposobów. Jeżeli chcesz konkretnie odpalać jakaś metodę przy wywołaniu zdarzenia wygoogluj sobie mvvm event to command, i szukaj hasła "Interactivity". W tej biblioteczce jest zaimplementowany mechanizm wywoływania commandów przy eventach.
Przykład

1 użytkowników online, w tym zalogowanych: 0, gości: 1