C# WIN UI 3:我有组合框 custom-typed observable collection 作为项目源。需要帮助获取所选项目

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

对 C# 非常陌生 WPF/WIN UI。我的组合框完美地显示了我的 collection。但是现在,当我想对用户选择的内容执行某些操作时,我无法在我的 'SelectionChanged' 事件处理程序中找到正确的语法。我想以某种方式获得 'Market_ID' 。 (仅供参考,我还没有使用 MVVM,因为我不知道如何实现,但我会学习。(真的很喜欢 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>

这是事件处理程序:(我首先使用了一个简单的字符串,并且有效,但现在我需要使用 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;
        }
    }

SelectedItem 属性 转换为您的类型。

例如,如果 marketIdentIEnumerable<YourClass>

var item = cmbMarketID.SelectedItem as YourClass;

或者如果 marketIdentIEnumerable<int>:

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