未在 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>
我有这个 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>