我在绑定到viewModel的ListView中有一个文本框和一个下拉列表。
还使用空的KeyUp/KeyDown/TextChange事件处理程序进行了检查。对于所有类型的按键,它都会引发KeyUp/KeyDown事件,但按任何字母数字键都不会触发TextChange。
请建议是否有人曾经遇到过这个问题。或者如果有办法调试并找到实际问题。
这是我的XAML-没有任何代码隐藏。
<Window x:Class="Ion.MarketView.Mmi.Plugins.AlertConfigurator.View.AlertConditionItemViewDebug"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
x:Name="aletConditionItems"
mc:Ignorable="d" >
<Grid >
<Grid.Resources>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="75"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ListView Grid.Column="0" x:Name="lstViewConditionItems"
ItemsSource="{Binding ElementName=aletConditionItems, Path=DataContext.Items}"
SelectedItem="{Binding ElementName=aletConditionItems, Path=DataContext.SelectedItem, Mode=TwoWay}">
<ListView.View>
<GridView>
<GridViewColumn Header="Column Id" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding Path=ColumnId}" Margin="-6,-2,-6,-2"
ItemsSource="{Binding ElementName=aletConditionItems, Path=DataContext.ColumnIds}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Value" Width="100" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="Only backSpace and SpaceBar works" ></TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<StackPanel Orientation="Horizontal" Grid.Column="1" VerticalAlignment="Top" >
<Button Content="+" Width="30" Command="{Binding ElementName=aletConditionItems, Path=DataContext.OnAddConditionItem}"></Button>
</StackPanel>
</Grid>
</Window>
注:
2) 问题不在textBox与viewModel的绑定中。我甚至不能编辑文本属性中硬编码的简单文本(如上面的代码)
3) 我没有在任何父控件中注册“any”事件处理程序。
根据@HCL建议的链接,下面的代码修复了我的问题。
Window window1 = new Window();
ElementHost.EnableModelessKeyboardInterop(window1); //This is needed for Sharing Message Loops Between Win32 and WPF
window1.Show();