首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定未在CommandBinding中执行

绑定未在CommandBinding中执行
EN

Stack Overflow用户
提问于 2017-08-08 17:34:00
回答 2查看 45关注 0票数 0

我有这个xaml代码:

代码语言:javascript
复制
<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>

Search-Method看起来像这样:

代码语言:javascript
复制
private void Search(object sender, RoutedEventArgs e)
{
    SearchContext = new ObservableCollection<string>(list.Where(element => element.Name == LastName).Select(el => el.Name).ToList());
}

MainCommands:

代码语言:javascript
复制
public static class MainCommands
{
    public static RoutedCommand Search = new RoutedCommand();
}

但是当焦点在textbox中时,如果我按enter,绑定是‘nt computet,LastName是Null。原因何在?我怎样才能避免这种情况?或者可以显式调用绑定操作?

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-08 17:44:05

UpdateSourceTrigger属性设置为PropertyChanged

代码语言:javascript
复制
<TextBox Text="{Binding LastName, UpdateSourceTrigger=PropertyChanged}">

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

票数 1
EN

Stack Overflow用户

发布于 2017-08-08 18:39:10

正如我所看到的,您的Window是它的视图模型。我建议您使用MVVM,并为视图模型提供单独的类,以便在KeyBinding上放置所需的ICommand和使用CommandParameter

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45564703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档