2013-03-18 57 views
5

目前,我结合我TextBox ES为:文本框绑定到两个LostFoucus和属性更新

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

此作品在获得每个按键做的按钮状态检查(这是我想要的)大。

此外,我想通过TextBox(通过绑定)跟踪LostFocus事件,并对每个按键做一些额外的计算,可能过于密集。

任何人都有如何完成这两个想法?

+0

下载它,你可以使用'TextBox.OnLostFocus'事件 – 2013-03-18 22:24:58

+0

我想他是想一个属性的引发LostFocus,我不知道这是可以做到 – 2013-03-18 22:25:37

+0

绑定是的,我希望的是让我的ViewModel在LostFocus上进行一些计算,并在键入时更新属性。 如果我只是计算他们键入的内容,可能会看到多少延迟,可能看起来很糟糕,因为其他数字根据他们输入的内容而改变。 – adondero 2013-03-18 22:41:16

回答

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,我创建了一个代理指挥和电线把它..

看起来这是工作,奇迹如果有更好的方法。其中一个缺点是每个文本框都会触发这个事件,而不仅仅是我想要计算的公式所附的项目。可能需要考虑如何改进这一点。

+0

您可以向文本框添加命令行为。只附加到需要该行为的文本框。 – TYY 2013-03-18 23:29:28

+0

我添加了一个自定义绑定属性给我的文本框,当我想要这种行为(默认关闭)时设置。似乎工作 – adondero 2013-03-19 15:48:13

+0

很高兴有帮助。 – TYY 2013-03-19 16:01:12

18

将命令绑定到TextBoxLostFocus事件。

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.Interactiviy这一点。你必须安装一个可再发行组件来使用这个库。你可以从here