2017-08-19 21 views
0

すべてのコントロールのバインドに「UpdateSourceTrigger = PropertyChanged」を追加したいと思います。WPF + DevExpress UpdateSourceTrigger

私はすべてのコントロールのために書き込むことであることを実感できます。

Text/EditValue/Stuff="{Binding x, UpdateSourceTrigger=PropertyChanged}" 

をしかし、可能であれば、それは私が何度も何度も記述する必要がありますだけで冗長XAMLコードであるため、私は、このアプローチを避けたいです一度コードを再利用するのではなく、

スタイルはオプションではありません。オブジェクトバインディングがxamlと異なるためです。

DevExpress社が使用されているので、ここではExtensionMethod

DevExpress.Mvvm.POCO.POCOViewModelExtensions.RaisePropertiesChanged(this); 

しかし、問題を利用します。カーソルがテキストエディットにまだある間、テキストエディットを編集(テキストエディットにクリックする、ものを入力して)想像しフィールドで、上記の拡張メソッドを呼び出します。 PropertyChangedが前に呼び出さなかったため、TextEditのEditValueは古い値にリセットされます。

アプリケーションワイドのすべてのバインディング動作を一度に変更する方法はありますか?

答えて

2

アプリケーションワイドのすべてのバインディング動作を一度に変更する方法はありますか?

いいえ、別の依存関係プロパティは、UpdateSourceTriggerプロパティごとに異なるデフォルト値を持っていますが、カスタムバインディングマークアップ拡張機能を作成できます。

public class PropertyChangedBinding : Binding 
{ 
    public PropertyChangedBinding() 
     :base() 
    { 
     UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
    } 

    public PropertyChangedBinding(string path) 
     : base(path) 
    { 
     UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
    } 
} 

を...そして、あなたのカスタムは、すべての間で結合して{Binding}を置き換えますXAMLファイル:

<TextBox Text="{local:PropertyChangedBinding x}" /> 
関連する問題