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
属性 转换为您的类型。
例如,如果 marketIdent
是 IEnumerable<YourClass>
:
var item = cmbMarketID.SelectedItem as YourClass;
或者如果 marketIdent
是 IEnumerable<int>
:
if (mbMarketID.SelectedItem != null)
{
var mktid = (int)mbMarketID.SelectedItem;
}
对 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
属性 转换为您的类型。
例如,如果 marketIdent
是 IEnumerable<YourClass>
:
var item = cmbMarketID.SelectedItem as YourClass;
或者如果 marketIdent
是 IEnumerable<int>
:
if (mbMarketID.SelectedItem != null)
{
var mktid = (int)mbMarketID.SelectedItem;
}