C# och WPF, kan inte få comboboxen att göra vad jag vill.

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45272
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

C# och WPF, kan inte få comboboxen att göra vad jag vill.

Inlägg av TomasL »

Och jo, jag har aldrig pysslat med C# och WPF innan, så det är helt nytt för mig.

Har en Combobox, laddar innehållet i den beroende på vilken av två radioknappar som är vald.
Detta fungerar problemfritt.

Kod: Markera allt

ComboBox Grid.Column="2" Grid.Row="0" x:Name="lstUnitType" Margin="20,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Height="28" Width="200" SelectedItem="0"  IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" IsReadOnly="True">
                
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding}"/>
                        </StackPanel>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
                
            </ComboBox>
Vad jag vill är att kunna sätta vad som visas som default när man väljer via radioknapparna, och det får jag inte till.
med xaml ovan så sker det första gången när fönstret laddas, men därefter får jag inte till det hela.
Initieringen:

Kod: Markera allt

        public frmSingle()
        {
            InitializeComponent();
            rdoHP.IsChecked = true;
            rdoCH.IsChecked = false;
            LoadListboxData();

            lstUnitType.DataContext = unitTypeList;
            // lstUnitType.SelectedItem = lstUnitType.Items.GetItemAt(0);
           // lstUnitType.SelectedIndex = 0;
            //lstUnitType.SelectedIndex{ }
            calcClass calc = new calcClass();
         }
Ladda boxen

Kod: Markera allt

        private void LoadListboxData()
        {
            unitTypeList.Add("Automatiskt Maskinval");
            

            if ((bool)rdoHP.IsChecked)
            {
                unitTypeList.Clear();
                unitTypeList.Add("Automatiskt Maskinval");
                unitTypeList.Add("HP50CC");
                unitTypeList.Add("HP100CC");
                unitTypeList.Add("HP200");
                unitTypeList.Add("HP300");
                unitTypeList.Add("HP400");
                unitTypeList.Add("HP500");
                unitTypeList.Add("HP600");
                unitTypeList.Add("HP700");
                unitTypeList.Add("HP1600RPE");

            }
            else if ((bool)rdoCH.IsChecked)
            {
                unitTypeList.Clear();
                unitTypeList.Add("Automatiskt Maskinval");
                unitTypeList.Add("CH50CC");
                unitTypeList.Add("CH100CC");
                unitTypeList.Add("CH200");
                unitTypeList.Add("CH300");
                unitTypeList.Add("CH400");
                unitTypeList.Add("CH500");
                unitTypeList.Add("CH600");
                unitTypeList.Add("CH700");
                unitTypeList.Add("CH1600RPE");
            }

            //lstUnitType.DataContext = unitTypeList;
          //  wlstUnitType.SelectedIndex = 0;

        }
Om radioknapparna ändras:

Kod: Markera allt

private void rdoType_Changed(object sender, RoutedEventArgs e)
        {
            LoadListboxData();
        }
N3M0
Inlägg: 135
Blev medlem: 2 januari 2011, 21:03:44
Ort: Lund

Re: C# och WPF, kan inte få comboboxen att göra vad jag vill

Inlägg av N3M0 »

Vad är unitTypeList för typ av lista? Om den är en ObservableCollection bör det fungera. Annars måste du trigga en OnPropertyChanged för objektet du har bindat comboboxen till.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45272
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: C# och WPF, kan inte få comboboxen att göra vad jag vill

Inlägg av TomasL »

Kod: Markera allt

public static ObservableCollection<string> unitTypeList = new ObservableCollection<string>{ "" };
Jag försöker med lstUnitType.SelectedIndex=0 och får exeption

lstUnitType.SelectedItem = lstUnitType.Items.GetItemAt(0); ger också exeption överallt.

På nått sätt måste jag köra en funktion när comboboxen uppdaterat sig med nya data.
PatrickOhlson
Tidigare PP3DP_SE
Inlägg: 269
Blev medlem: 18 mars 2012, 11:50:08
Ort: Södermanland

Re: C# och WPF, kan inte få comboboxen att göra vad jag vill

Inlägg av PatrickOhlson »

Kör MVVM med Wpf

https://www.google.se/webhp?sourceid=ch ... mvvm%20wpf

All kod körs med fördel separerad mellan modell och vy idag

I övrigt som N3M0 sade

Good luck

//P
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45272
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: C# och WPF, kan inte få comboboxen att göra vad jag vill

Inlägg av TomasL »

PP3DP, lugn nu, en sak i taget, måste ju lära mig hur detta med C# och WPF fungerar innan jag ger mig på nya saker.

Jo, jag löste problemet, vilket naturligtvis var störtenkelt när man väl kom på det.
I huvudfunktionen för fönstret så kör jag funktionen som laddar listdata, därefter binder jag comboboxen med datakällan.
Problemet var att första gången som jag skulle ställa SelectedIndex, så fanns det ingen datakälla bunden till boxen.
Än så länge använder jag en hjälpvariabel för att avgöra om boxen blivit fullt initierad och data bundna till den, först när allt det är klart, så kan jag köra SelectedIndex.

Skall stuva om lite i koden framöver så jag slipper hjälpvariabeln, men i nuläget får den vara där, annat roligare att göra (skriva in närmare 3000 double konstanter i programmet) (lite svettigt faktiskt)
Användarvisningsbild
Erikk
Inlägg: 63
Blev medlem: 1 april 2011, 12:13:40

Re: C# och WPF, kan inte få comboboxen att göra vad jag vill

Inlägg av Erikk »

Tjabba.

Test nåt åt det här hållet:
( med reservation att jag missförstått problemet :mrgreen: )

Kod: Markera allt

lstUnitType.SelectedItem = (from a in unitTypeList where a == "HP400" select a).ToList().First();

Observera att detta kräver att Linq är medlagt som resource högst upp i classen.

Kod: Markera allt

using System.Linq;
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45272
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: C# och WPF, kan inte få comboboxen att göra vad jag vill

Inlägg av TomasL »

Redan löst, det var ordningen som saker gjordes i som skapade problemet, vilket jag inte begrep först.
Användarvisningsbild
Erikk
Inlägg: 63
Blev medlem: 1 april 2011, 12:13:40

Re: C# och WPF, kan inte få comboboxen att göra vad jag vill

Inlägg av Erikk »

:tumupp:

Tänkte mest påpeka att det ofta är bättre att söka igenom listor och plocka ut ett resultat, än att hålla reda på vilket index objektet ligger på.
Då kan man sortera listorna hur som helst efter att man lagt in datan.

Tänk även på att man kan göra en bindning på detta vis, om man har en lista med objekt som i sig innehållar en sträng som man vill visa i en textruta beroende på vad man valt i en combobox.
När man fyllt comboboxen med objekt så kan man få en textblock att följa vad man valt, utan att behöva skriva någon kod.

Kod: Markera allt

Text="{Binding ElementName=ExempelComboBox, Path=SelectedItem.Namn, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45272
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: C# och WPF, kan inte få comboboxen att göra vad jag vill

Inlägg av TomasL »

I min applikation så vill jag ha dem i en viss specifik ordning, vilket inte skall kunna ändras, av olika skäl.
Skriv svar