どのようにこのようなテンプレートを書くことができますか?UpdateSourceTrigger = PropertyChangedをすべてのテキストボックスに適用するwpf
<DataTemplate ... TextBlock>
UpdateSourceTrigger=PropertyChanged
</DataTemplate>
どのようにこのようなテンプレートを書くことができますか?UpdateSourceTrigger = PropertyChangedをすべてのテキストボックスに適用するwpf
<DataTemplate ... TextBlock>
UpdateSourceTrigger=PropertyChanged
</DataTemplate>
スタイル内のUpdateSourceTrigger
のデフォルトモードを変更することはできません。これは、DependencyProperty
(この場合はText
プロパティ)が登録されている場合、FrameworkPropertyMetadata
クラスのDefaultUpdateSourceTrigger
として設定されます。
TextBox
から派生し、依存関係プロパティを登録するときにこの値を変更するカスタムテキストボックスタイプを作成するか、代わりに、Caliburn.Micro MVVMフレームワークを調べることもできます。このフレームワークでは、アプリケーションのすべてのテキストボックスに対して自動的にこれを(コードを使って、規約に基づいたバインディングの一部として)設定します。ただ、受け入れ答え(はい、私は:)私はこの質問をnecromancingています知っている)を拡張
:
は実際には、自身のTextBoxは非常に簡単です、TextBoxExt(多くの拡張が、あなたが知っていないそれを呼び出すことができます... )
public class TextBoxExt : TextBox
{
private static readonly MethodInfo onTextPropertyChangedMethod
= typeof(TextBox).GetMethod("OnTextPropertyChanged", BindingFlags.Static | BindingFlags.NonPublic);
private static readonly MethodInfo coerceTextMethod
= typeof(TextBox).GetMethod("CoerceText", BindingFlags.Static | BindingFlags.NonPublic);
static TextBoxExt()
{
TextProperty.OverrideMetadata(
typeof(TextBoxExt),
// found this metadata with reflector:
new FrameworkPropertyMetadata(string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal,
new PropertyChangedCallback(MyOnTextPropertyChanged),callback
new CoerceValueCallback(MyCoerceText),
true, // IsAnimationProhibited
UpdateSourceTrigger.PropertyChanged)
);
}
private static object MyCoerceText(DependencyObject d, object basevalue)
{
return coerceTextMethod.Invoke(null, new object[] { d, basevalue });
}
private static void MyOnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
onTextPropertyChangedMethod.Invoke(null, new object[] { d, e });
}
}
とどこか{}のResourceDictionaryの.xamlまたはApp.xamlで:
<Style TargetType="{x:Type control:TextBoxExt}"
BasedOn="{StaticResource {x:Type TextBox}}" />
私は答えを更新しました。 – devdigital
MVVMフレームワークを使用してみましたか?それはあなたに仕事のすべてのホストを保存し、バインディングはCaliburn.Microとの喜びです。独自のソリューションをロールしたい場合は、独自のTextBox派生型を作成するのではなく、カスタムマークアップ拡張、またはカスタムバインディングを記述することができます。いくつかのアイデアについてはhttp://www.paulstovell.com/wpf-delaybindingまたはhttp://www.hardcodet.net/2008/04/wpf-custom-binding-classをご覧ください。 – devdigital
ありがとうございました! – syned