C# WIN UI 3: I have combobox with custom-typed observable collection as itemssource. Need help getting selected item

Viewed 215

very new to C# WPF/WIN UI. My combobox displays my collection perfectly. But now when I want to do something with what the user selected I can't find the correct syntax in my 'SelectionChanged' event handler. I want to get the 'Market_ID' somehow. (FYI, I am not using MVVM yet as I don't understand how to implement, but I will learn. (really liking c#))

    <ComboBox x:Name="cmbMarketID" PlaceholderText="Select Market ID" Width="500" Margin="5,5,0,0" RelativePanel.RightOf="border1" RelativePanel.Below="cmbState" ItemsSource="{x:Bind marketIdent}" SelectionChanged="cmbMarketID_SelectionChanged" SelectedItem="{Binding Market_ID}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock x:Name="cmbo_market_ID" Text="{Binding Market_ID}" Width="15" TextAlignment="Right"/>
                    <TextBlock Text="{Binding Product}" Width="145" Margin="10,0,10,0" FontWeight="SemiBold"/>
                    <TextBlock Text="{Binding Company}" Width="70" Margin="10,0,10,0"/>
                    <TextBlock Text="{Binding System}" Margin="10,0,10,0"/>
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

Here is the event handler: (I used a simple string first, and that worked, but now I need to use a typed-collection)

    private void cmbMarketID_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (cmbMarketID.SelectedIndex == -1)
        {
            // Do not execute event
        }
        else
        {
            //string mktid = cmbMarketID.SelectedItem.ToString().Substring(0, 2).TrimEnd();
            //string mktid = cmbMarketID.SelectedItem;
            int mktid = (int)cmbMarketID.SelectedItem(); <-------what should the correct syntax be here? 
            //v_metric_mktid = mktid;
        }
    }
1 Answers

Cast the SelectedItem property to your type.

For example, if marketIdent is an IEnumerable<YourClass>:

var item = cmbMarketID.SelectedItem as YourClass;

Or if marketIdent is an IEnumerable<int>:

if (mbMarketID.SelectedItem != null)
{
     var mktid = (int)mbMarketID.SelectedItem;
}
Related