新文本将永远不会出现在ComboBox
内的项目中。下面是完整的XAML +代码隐藏,无法正常运行。我要达到的目的是让用户从组合框中选择一个实际的项目组,或者将一个 No Group
(斜体,变灰)的项目选择为空ComboBox
内的文本框中输入字符串。
我也尝试过:
StaysOpenOnEdit="True"
(结果相同)和Selected
"click me"
的{{1}}事件(在ComboBox的ComboBoxItem
或Text
属性更改之前调用事件处理程序)。 SelectedItem
<Window x:Class="cs_wpf_test_12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:cs_wpf_test_12"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel Orientation="Vertical">
<ComboBox SelectionChanged="ComboBox_SelectionChanged"
IsEditable="True">
<ComboBoxItem>test</ComboBoxItem>
<ComboBoxItem Foreground="Gray">click me</ComboBoxItem>
</ComboBox>
</StackPanel>
</Window>
预期::当用户单击下拉菜单中的“单击我”项目时,internal bool HandlingSelectionChange = false;
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (HandlingSelectionChange)
{
return;
}
HandlingSelectionChange = true;
var cb = sender as ComboBox;
if (cb.Text == "click me")
{
cb.Text = "";
e.Handled = true;
}
HandlingSelectionChange = false;
}
的文本将变为空字符串。单击其余项目时,应将其文本正常复制到ComboBox
的文本框中。
实际:
我希望使用MVVM,但我仍然是初学者。我在ComboBox
中有多个ComboBox
,如上所示,对于每个DataGridTemplateColumn
(应该具有相同的下拉内容),我认为我应该有一个ViewModel每个ComboBox
。如果可能的话,我想学习在这种情况下如何正确使用MVVM。
ComboBoxItem
<DataGridTemplateColumn Header="Group Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding GroupName, Mode=OneWay}">
</Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox IsEditable="True" StaysOpenOnEdit="True"
ItemsSource="{Binding Path=Clocks.GroupsVM,
RelativeSource={RelativeSource AncestorType=local:ClockDataGrid}}"
PreviewKeyDown="ComboBox_PreviewKeyDown"
SelectionChanged="ComboBox_SelectionChanged"
Text="{Binding GroupName}">
<ComboBox.Resources>
<Style TargetType="ComboBoxItem">
<Setter Property="FontStyle" Value="{Binding FontStyle}"/>
<Setter Property="Foreground" Value="{Binding Foreground}"/>
</Style>
</ComboBox.Resources>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
答案 0 :(得分:1)
ComboBox.Text将不会在SelectionChanged事件中立即更新。您可以改用SelectedValue的内容。并将SelectedValue设置为null。像这样更改您的if条件。
if ((cb.SelectedValue as ComboBoxItem).Content.ToString() == "click me")
{
cb.Text = "";
cb.SelectedValue = null;
e.Handled = true;
}