C# wpf应用程序中的自定义组合框选定文本
我有一个wpf应用程序,其中存在以下问题:C# wpf应用程序中的自定义组合框选定文本,c#,.net,wpf,mvvm,mvvm-light,C#,.net,Wpf,Mvvm,Mvvm Light,我有一个wpf应用程序,其中存在以下问题: <UserControl.Resources> <ItemsPanelTemplate x:Key="VSP"> <VirtualizingStackPanel VirtualizingPanel.CacheLength="20" Virtuali
<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>
如果(SelectedItem==null){return;},我在这一行中放置了一个断点。当我从组合框中选择一个元素时,事件将引发两次!!第一个SelectedItem
是所选对象,但第二个对象的值为null
所以我需要知道:
为什么这项活动被提了两次
如何修复我的代码
谢谢,您可以使用ItemTemplate
我的组合框
如下所示:
<ComboBox Margin="12,6,12,0" SelectedIndex="{Binding DatabaseIndex, Mode=TwoWay}"
ItemsSource="{Binding Databases}"
ItemTemplate="{StaticResource DatabaseComboTemplate}"/>
<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>
输出如下所示:
<ComboBox Margin="12,6,12,0" SelectedIndex="{Binding DatabaseIndex, Mode=TwoWay}"
ItemsSource="{Binding Databases}"
ItemTemplate="{StaticResource DatabaseComboTemplate}"/>
<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>
您可以使用ItemTemplate
我的组合框
如下所示:
<ComboBox Margin="12,6,12,0" SelectedIndex="{Binding DatabaseIndex, Mode=TwoWay}"
ItemsSource="{Binding Databases}"
ItemTemplate="{StaticResource DatabaseComboTemplate}"/>
<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>
输出如下所示:
<ComboBox Margin="12,6,12,0" SelectedIndex="{Binding DatabaseIndex, Mode=TwoWay}"
ItemsSource="{Binding Databases}"
ItemTemplate="{StaticResource DatabaseComboTemplate}"/>
<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的对象的属性
你需要读更多的书
这里是重要的部分
将Text属性设置为不在集合中的值会使SelectedIndex保持不变
这意味着您必须向绑定对象添加一个属性,该属性为控件提供要显示的文本。不允许创建最初不是绑定对象一部分的文本属性。Andrew Stephens是正确的。您必须从处理程序中删除文本赋值。您试图显示的文本必须是绑定为SelectedItem的对象的属性
你需要读更多的书
这里是重要的部分
将Text属性设置为不在集合中的值会使SelectedIndex保持不变
这意味着您必须向绑定对象添加一个属性,该属性为控件提供要显示的文本。不允许创建最初不是绑定对象一部分的文本属性。这是因为Text=…
行吗?当您设置组合框的文本属性时,它具有更改选择的效果。您能描述一下,为什么需要自定义组合框
?看起来您只需要更改一些样式或模板。@AndrewStephens如何解决这个问题?是因为Text=…
行吗?当您设置组合框的文本属性时,它具有更改选择的效果。您能描述一下,为什么需要自定义组合框
?看起来您只需要更改一些样式或模板。@AndrewStephens如何解决此问题?请重新阅读我使用的代码ItemTemplate
。选择后(当弹出窗口关闭时),我需要自定义组合框中显示的文本。请重新读取我使用的代码ItemTemplate
。我需要自定义选择后组合框中显示的文本(当弹出窗口关闭时)