文本框绑定到LostFocus和Property Update

时间:2013-03-18 22:19:13

标签: wpf xaml binding textbox prism

目前我将TextBox es绑定为:

Text="{Binding DocValue,
         Mode=TwoWay,
         ValidatesOnDataErrors=True,
         UpdateSourceTrigger=PropertyChanged}"

这可以很好地让每次按键进行按钮状态检查(我想要)。

此外,我想跟踪LostFocus上的TextBox事件(通过绑定)并执行一些额外的计算,这些计算对于每次击键都可能过于密集。

任何人都有关于如何完成两者的想法?

3 个答案:

答案 0 :(得分:18)

将命令绑定到TextBox LostFocus事件。

XAML

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>

查看模型

private ICommand lostFocusCommand;

public ICommand LostFocusCommand
{
    get
    {
        if (lostFocusCommand== null)
        {
            lostFocusCommand= new RelayCommand(param => this.LostTextBoxFocus(), null);
        }
        return lostFocusCommand;
     }
}

private void LostTextBoxFocus()
{
    // do your implementation            
}

您必须为此引用System.Windows.Interactivity。并且您必须安装可再发行组件才能使用此库。您可以从here

下载

答案 1 :(得分:2)

为补充投票最高的答案,dotnet核心已迁移了交互库。使此工作正常的步骤:

  1. 删除对“ Microsoft.Expression.Interactions”和“ System.Windows.Interactivity”的引用
  2. 安装“ Microsoft.Xaml.Behaviors.Wpf” NuGet程序包。
  3. XAML文件–用“ http://schemas.microsoft.com/expression/2010/interactivity”替换xmlns名称空间“ http://schemas.microsoft.com/expression/2010/interactions”和“ http://schemas.microsoft.com/xaml/behaviors
  4. C#文件–用“ Microsoft.Xaml.Behaviors”替换c#文件“ Microsoft.Xaml.Interactivity”和“ Microsoft.Xaml.Interactions”中的用法

通过blog (Dec 2018) post here

答案 2 :(得分:1)

我想我找到了一个解决方案......我创建了一个复合命令,并将其用于其他通信。

命令定义

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中,我创建了一个委托命令并连接到它..

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