SelectionChanged, a MVVM w aplikacji uniwersalnej.

SelectionChanged, a MVVM w aplikacji uniwersalnej.
ZD
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 8 lat
  • Postów:99
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.

Kopiuj
<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...

UnlimitedPL
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:231
0

Binduj SelectedItem do ViewModelu.

ZD
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 8 lat
  • Postów:99
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:

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

i w xaml tylko:

Kopiuj
SelectionChanged="Menu_comboBox_SelectionChanged"
edytowany 3x, ostatnio: Zdziwiony
ZD
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 8 lat
  • Postów:99
0
MT
ten link nie działa
ZD
Kurcze, to było dosyć dawno to i link nieaktywny :P Rozwiązałem to tak: https://csharp-dev.pl/2017/01/17/zdarzenia-a-komendy-we-wzorcu-mvvm/ Przykład trochę inny, ale zasada taka sama - po prostu podpinasz event, pod komendę ;)
ZD
Nie pamiętam czy System.Windows.Interactivity działało na UWP. Ale są jakieś alternatywy: https://stackoverflow.com/questions/43304970/binding-ui-events-to-commands-in-uwp
T2
  • Rejestracja:prawie 11 lat
  • Ostatnio:9 miesięcy
  • Postów:194
0

Dlaczego Bindowanie nie zadziałało ?

MT
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
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:

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

i w xaml tylko:

Kopiuj
SelectionChanged="Menu_comboBox_SelectionChanged"

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

Kopiuj
       <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>
Kopiuj
        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(); }
        }
SK
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:117
0

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


MT
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
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.

edytowany 1x, ostatnio: MM_TT
V0
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:47
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.