【发布时间】:2015-09-17 06:38:06
【问题描述】:
我在 ComboBox 中实现了一个自动完成功能,如下所示。自动完成工作正常。我面临的唯一问题是,我希望我的 SelectedItems 显示为ItemNumber[space]ItemDescription。目前,当我从自动完成中选择它时,它只显示 ItemNumber。你们可以修改下面的现有代码吗?
class ItemDetails
{
string _itemNumber;
string _itemDescription;
public string ItemNumber
{
get { return _itemNumber; }
set { _itemNumber = value; }
}
public string ItemDescription
{
get { return _itemDescription; }
set { _itemDescription = value; }
}
public ItemDetails() { }
public ItemDetails(string itemNo, string description)
{
_itemNumber = itemNo;
_itemDescription = description;
}
}
填充材质
private void InitMaterial()
{
List<ItemDetails> items = new List<ItemDetails>();
for (int i = 0; i <= 1000; i++)
{
items.Add(new ItemDetails(i.ToString(), "Item " + i.ToString()));
}
cbo1.ItemsSource = items;
}
XAML
<ComboBox x:Name="cboItemNoLegacy" HorizontalContentAlignment="Stretch"
TextSearch.TextPath="MaterialNumberLegacy"
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True"
IsEditable="True"
SelectedItem="{Binding LegacyItemNumber, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, Mode=TwoWay, Converter={StaticResource MaterialMasterConverter}}"
SelectionChanged="cboItemNoLegacy_SelectionChanged">
<ComboBox.ItemContainerStyle>
<Style>
<Setter Property="Control.Padding" Value="0"></Setter>
<Style.Triggers>
<Trigger Property="ComboBoxItem.IsSelected" Value="True">
<Setter Property="ComboBoxItem.Background" Value="SkyBlue" />
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid Margin="0">
<Border Margin="5" BorderThickness="0" BorderBrush="SteelBlue"
CornerRadius="1">
<Grid HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbSiteCode" FontWeight="Normal" Text="{Binding Path=ItemNumber}" Margin="0,0,7,0"></TextBlock>
<TextBlock Grid.Column="1" x:Name="tbSiteDesc" FontWeight="Normal" Text="{Binding Path=ItemDescription}" Margin="0,0,7,0"></TextBlock>
</Grid>
</Border>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
【问题讨论】:
-
所以你有一个 ItemDetails 列表以某种方式 (
ItemsSource="{Binding}") 绑定到 ComboBox 的 ItemsSource,MaterialNumberLegacy 和 MaterialDescription 属性来自哪里?在您的情况下,自动完成到底意味着什么? -
@NovitchiS 我已经编辑了上面的代码,包括我如何填充组合框。我还更新了 XAML 以使用我使用的正确属性。那么,将在组合框中显示的文本将在自动完成功能中有所不同。当我在组合框中选择一个项目时删除组合框中的自动完成设置时,它会显示 ItemNumber 和 ItemDescription。但是,如果我的组合框中有自动完成设置,则只有 ItemNumber 会显示在组合框中。您可以查看我附上的上述图片以供参考。
标签: c# wpf data-binding wpf-controls mahapps.metro