Sida 1 av 1

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

Postat: 11 januari 2017, 17:51:59
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();
        }

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

Postat: 11 januari 2017, 22:48:36
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.

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

Postat: 11 januari 2017, 22:52:07
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.

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

Postat: 12 januari 2017, 19:39:46
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

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

Postat: 12 januari 2017, 19:48:38
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)

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

Postat: 13 januari 2017, 10:21:24
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;

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

Postat: 13 januari 2017, 10:52:43
av TomasL
Redan löst, det var ordningen som saker gjordes i som skapade problemet, vilket jag inte begrep först.

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

Postat: 13 januari 2017, 11:05:40
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}"

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

Postat: 13 januari 2017, 11:33:59
av TomasL
I min applikation så vill jag ha dem i en viss specifik ordning, vilket inte skall kunna ändras, av olika skäl.