未在 CommandBinding 中执行绑定

Binding was not executed in CommandBinding

我有这个 xaml 代码:

<Window.CommandBindings>
    <CommandBinding Command="WpfApplication1:MainCommands.Search" Executed="Search"/>
</Window.CommandBindings><Grid>
<StackPanel>
    <ListView ItemsSource="{Binding SearchContext}" />
    <TextBox Text="{Binding LastName}">
        <TextBox.InputBindings>
            <KeyBinding Key="Enter" Command="{x:Static WpfApplication1:MainCommands.Search}" />
        </TextBox.InputBindings>
    </TextBox>
</StackPanel>

搜索方法看起来像:

private void Search(object sender, RoutedEventArgs e)
{
    SearchContext = new ObservableCollection<string>(list.Where(element => element.Name == LastName).Select(el => el.Name).ToList());
}

主要命令:

public static class MainCommands
{
    public static RoutedCommand Search = new RoutedCommand();
}

但是,如果我在焦点位于文本框中时按 Enter 键,则绑定不是计算机且 LastName 为 Null。是什么原因?我怎样才能避免这种情况?或者是否可以显式调用绑定操作?

提前致谢。

UpdateSourceTrigger 属性 设置为 PropertyChanged:

<TextBox Text="{Binding LastName, UpdateSourceTrigger=PropertyChanged}">

这将导致立即设置源 属性 (LastName):https://msdn.microsoft.com/en-us/library/system.windows.data.updatesourcetrigger(v=vs.110).aspx

据我所知,您的 Window 是它的视图模型。我建议您使用 MVVM 并为视图模型设置单独的 class,您可以在其中放置所需的 ICommand 并在 KeyBinding:

上使用 CommandParameter
<TextBox x:Name="searchBox"
         Text="{Binding LastName}">
    <TextBox.InputBindings>
        <KeyBinding Key="Enter"
                    Command="{Binding Path=SearchCommand}"
                    CommandParameter="{Binding Path=Text, ElementName=searchBox}" />
    </TextBox.InputBindings>
</TextBox>