6

TextBox現在、私は自分のesに次のようにバインドしています。

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

これは、すべてのキーストロークでボタンのステータスチェックを実行するのに最適です(これは私が望んでいます)。

さらにLostFocus、(バインディングを介して)イベントを追跡し、TextBoxキーストロークごとに集中しすぎる可能性のある追加の計算を実行したいと思います。

誰もが両方を達成する方法について考えていますか?

4

3 に答える 3

22

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。また、このライブラリを使用するには、再配布可能ファイルをインストールする必要があります。こちらからダウンロードできます

于 2013-03-19T03:54:51.723 に答える
4

投票数の多い回答を補足するために、dotnetcoreは対話型ライブラリを移行しました。これを機能させるための手順:

  1. 「Microsoft.Expression.Interactions」および「System.Windows.Interactivity」への参照を削除します
  2. 「Microsoft.Xaml.Behaviors.Wpf」NuGetパッケージをインストールします。
  3. XAMLファイル–xmlns名前空間「http://schemas.microsoft.com/expression/2010/interactivity」および「http://schemas.microsoft.com/expression/2010/interactions」を「http://schemas」に置き換えます。 microsoft.com/xaml/behaviors "
  4. C#ファイル– c#ファイル「Microsoft.Xaml.Interactivity」および「Microsoft.Xaml.Interactions」の使用法を「Microsoft.Xaml.Behaviors」に置き換えます

ブログ経由(2018年12月)ここに投稿

于 2020-01-09T01:46:37.263 に答える
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で、委任コマンドを作成し、それに接続します。

それは機能しているようです、もっと良い方法があるかどうか疑問に思います。これの1つの欠点は、計算したい数式に添付されているアイテムだけでなく、すべてのテキストボックスがこれを起動することです。これを改善する方法を考える必要があるかもしれません。

于 2013-03-18T23:23:42.020 に答える