Wpf 文本框绑定到LostFocus和属性更新

Wpf 文本框绑定到LostFocus和属性更新,wpf,xaml,binding,textbox,prism,Wpf,Xaml,Binding,Textbox,Prism,当前我绑定到我的文本框es,如下所示: Text="{Binding DocValue, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" 这在让每次按键都进行按钮状态检查(我想要)方面非常有效 此外,我想跟踪文本框(通过绑定)上的LostFocus事件,并进行一些额外的计算,这些计算对于每次击键来说可能过于密集 有人想过如何实现这两

当前我绑定到我的
文本框
es,如下所示:

Text="{Binding DocValue,
         Mode=TwoWay,
         ValidatesOnDataErrors=True,
         UpdateSourceTrigger=PropertyChanged}"
这在让每次按键都进行按钮状态检查(我想要)方面非常有效

此外,我想跟踪
文本框
(通过绑定)上的
LostFocus
事件,并进行一些额外的计算,这些计算对于每次击键来说可能过于密集


有人想过如何实现这两个目标吗?

我想我已经找到了一个解决方案。。。我创建了一个复合命令,并将其用于额外的通信

命令定义

public static CompositeCommand TextBoxLostFocusCommand = new CompositeCommand();
我的文本框

private void TextboxNumeric_LostFocus(object sender, RoutedEventArgs e)
{
    if (Commands.TextBoxLostFocusCommand.RegisteredCommands.Count > 0)
    {
        Commands.TextBoxLostFocusCommand.Execute(null);
    }
}
然后在我的ViewModel中,创建一个委托命令并连接到它


它似乎在工作,不知道是否有更好的方法。这种方法的一个缺点是,每个文本框都会触发此命令,而不仅仅是我想要计算的公式所附带的项目。可能需要考虑改进的方法。

将命令绑定到
文本框
LostFocus
事件

XAML


为此,您必须参考
System.Windows.Interactivity
。您必须安装一个可再发行版本才能使用此库。您可以从

下载,以补充投票率最高的答案,dotnet core已经迁移了互动库。使其工作的步骤:

  • 删除对“Microsoft.Expression.Interactions”和“System.Windows.Interactivity”的引用
  • 安装“Microsoft.Xaml.Behaviors.Wpf”NuGet包
  • XAML文件–将xmlns命名空间“”和“”替换为“”
  • C#files–将C#files“Microsoft.Xaml.Interactivity”和“Microsoft.Xaml.Interactivity”中的用法替换为“Microsoft.Xaml.Behaviors”

  • 通过

    你可以使用
    文本框。OnLostFocus
    即使我认为他想要将一个属性绑定到LostFocus,我不知道这是否可以实现。啊,我希望找到一种方法,让我的ViewModel对LostFocus进行一些计算,同时在属性键入时保持更新。我将试着看看如果我只是按照他们输入的方式计算,会有多大的延迟。。其他数字可能会因其类型的不同而发生变化,这看起来很糟糕。您不能设置两个UpdateSourceTrigger,您必须使用事件LostFocus并从后面的代码更新ViewModel。您可能可以向文本框添加命令行为。并且只附加到需要该行为的文本框。我在文本框中添加了一个自定义绑定属性,该属性在我希望启用该行为时设置(默认情况下为禁用)。看起来很有效
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    
    <TextBox Margin="0,287,0,0">
         <i:Interaction.Triggers>
              <i:EventTrigger EventName="LostFocus">
                   <i:InvokeCommandAction Command="{Binding LostFocusCommand}" />
              </i:EventTrigger>
         </i:Interaction.Triggers>
    </TextBox>