繁体   English   中英

WPF应用程序中的自定义组合框选择的文本

[英]Custom combobox selected text within wpf application

我有一个wpf应用程序,其中有这个问题:

    <UserControl.Resources>
                <ItemsPanelTemplate x:Key="VSP">
                    <VirtualizingStackPanel 
                        VirtualizingPanel.CacheLength="20"
                        VirtualizingPanel.ScrollUnit="Item"
                        VirtualizingPanel.VirtualizationMode="Recycling"
                        VirtualizingPanel.IsVirtualizing="True"/>
                </ItemsPanelTemplate>
                <DataTemplate x:Key="ExpertTemplate">
                    <Grid Width="640">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="160"/>
                            <ColumnDefinition Width="160"/>
                            <ColumnDefinition Width="160" />
                            <ColumnDefinition Width="160"/>
                        </Grid.ColumnDefinitions>
                        <Label Content="{Binding fsign_id}" Grid.Column="0"   />
                        <Label Content="{Binding fsign_civilite}" Grid.Column="1" />
                        <Label Content="{Binding fsign_nom}" Grid.Column="2"  />
                        <Label Content="{Binding fsign_prenom}" Grid.Column="3"  />
                    </Grid>
                </DataTemplate>
            </UserControl.Resources>
        .............
         <DataGrid x:Name="grid"  ItemsSource="{Binding Entitites}" SelectedValue="{Binding SelectedValue}"   >
                <DataGrid.Resources>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="HorizontalAlignment" Value="Center" />
                                </Style>
                 </DataGrid.Resources>
                 <DataGrid.Columns>
                                  <DataGridTemplateColumn Header="Participant" Width="200">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <skin:ParticipantExpert  SelectedValue="{Binding SelectedElement, Mode=TwoWay,  UpdateSourceTrigger=LostFocus}"  ItemsPanel="{StaticResource VSP}"  ItemTemplate="{DynamicResource ExpertTemplate }"   Width="220"      ItemsSource="{Binding ExpertCollection}"  >

                                            </skin:ParticipantExpert>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
                  </DataGrid.Columns>
        </DataGrid>

定制的组合框:

 public class ParticipantExpert : ComboBox 
    {

        public ParticipantExpert()
        {

        } 
        protected override void OnSelectionChanged(SelectionChangedEventArgs e)
        {
            if (SelectedItem == null) { return; }
            vue_groupe_participant CurrentItem = (vue_groupe_participant)SelectedItem;
            Text = CurrentItem.fsign_nom + "   " + CurrentItem.fsign_prenom;
        }

    }

if (SelectedItem == null) { return; } if (SelectedItem == null) { return; } 当我从组合框中选择一个元素时,事件将引发两次! 第一个SelectedItem是选定的对象,而在第二个中,它将null作为值。

所以我需要知道:

  1. 为什么该活动两次提出?
  2. 如何修复我的代码?

谢谢,

您可以使用ItemTemplate

我的ComboBox看起来像这样:

<ComboBox Margin="12,6,12,0" SelectedIndex="{Binding DatabaseIndex, Mode=TwoWay}" 
                  ItemsSource="{Binding Databases}" 
                  ItemTemplate="{StaticResource DatabaseComboTemplate}"/>

ItemTemplate看起来像这样:

<DataTemplate x:Key="DatabaseComboTemplate" DataType="ItemTemplate">
        <StackPanel Orientation="Horizontal" Height="20">
            <Image Source="/AppWPF;component/Images/DatabaseImage.ico" Height="16" Width="16"/>
            <Label Content="{Binding DatabaseDisplayString}" Margin="0,-3,0,0"/>
        </StackPanel>
</DataTemplate>

输出看起来像这样:

在此处输入图片说明

安德鲁·斯蒂芬斯是正确的。 您必须从处理程序中删除文本分配。 您尝试显示的文本必须是绑定为SelectedItem的对象的属性。

您需要阅读有关ComboBox.Text的更多信息。

这是重要的部分

将Text属性设置为不在集合中的值将保持SelectedIndex不变。

这意味着您必须向绑定对象添加一个属性,该属性为控件提供要显示的文本。 不允许创建最初不属于绑定对象的Text属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM