代码之家  ›  专栏  ›  技术社区  ›  Manish Basantani

无法在GridView/ListView(WPF)中的文本框中输入文本

  •  4
  • Manish Basantani  · 技术社区  · 15 年前

    我在绑定到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();
    
    1 回复  |  直到 13 年前
        1
  •  4
  •   HCL    15 年前

    如果没有,请检查是否已在将e.Handled-property设置为true的父元素(window、usercontrol、grid)中注册PreviewKeyDown事件处理程序(或处理键盘输入的任何其他已注册的PreviewKeyDown事件处理程序)。

    还有一件事:是线吗

    <TextBox Text="Only backSpace and SpaceBar works" ></TextBox>
    

    真的行不起作用还是你有一个绑定不起作用?

    更新:

    好的,因为它是一个win窗体应用程序,所以必须重定向win32消息循环中的消息。看 here here here

    另外一个提示:注意在集成的WPF窗口中创建新窗口。据我所知,在一个老项目中,您还必须将消息转发到任何新的子窗口。