2011-04-21 9 views
4

スタイルバインディング?私は、ユーザーコントロールにいくつかのテキストボックスを持っている

<TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}"></TextBox> 
<TextBox Text="{Binding Path=Street, UpdateSourceTrigger=PropertyChanged}"></TextBox> 

は、私は、各テキストボックスUpdateSourceTrigger=PropertyChangedのために記述する必要はありませんように私のバインディングのスタイルのような何かをするXAMLでの方法はありますが、 Path=部分のみ?

ありがとうございます!

答えて

2

いいえ、XAMLまたはスタイルでこれを行う方法はありません。あなたが望むことができる最高ののは、デフォルトの動作を変更するカスタムコントロールを作成することです。ような何か:

public class MyTextBox : TextBox { 
    static MyTextBox() { 
     TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata() { DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged }); 
    } 
} 

次にあなたがTextBoxの代わりにMyTextBoxを使用する必要があるだろう。

+0

ありがとうございます。私はすでにその解決策をとっていましたが、私はXAMLに関して何か不足していることを期待していました。残念ながら違います。 – Dummy01

5

私も、私はプロパティにバインドしたかったので、私は、私はthis post.

に出くわし前に一年以上それは基本的にMarkupExtensionを(サブクラス化することをやったEVERY時間をいくつかのクレイジー長い結合句を書くことで本当のイライラましたこれはBindingクラスである)をBindingDecoratorBaseという抽象クラスに割り当てると、Bindingクラスが提供するすべてのプロパティが提供されます。だから、そこから、あなたはこのような何か行うことができます:

public class SimpleBinding : BindingDecoratorBase 
{ 
    public SimpleBinding(string path) : this() 
    { 
    Path = new System.Windows.PropertyPath(path); 
    } 
    public SimpleBinding() 
    { 
    TargetNullValue = string.Empty; 
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
    } 
} 

をそしてあなたがあなたのXAMLにしなければならないすべては、コントロールにバインドするために一番上に名前空間を含め、その後 され、このような何かを行います

<TextBox Text="{m:SimpleBinding Name}"></TextBox> 
<TextBox Text="{m:SimpleBinding Street}"></TextBox> 

これにより、バインディング・フレーズで書き込む必要のないすべてのコントロールをサブクラス化するのが簡単になります。

+0

これはサブクラス化よりも優れたアプローチです。ここでは、任意のコントロール上の任意のバインディングにこのテクニックを適用できます。このテクニックで不足することはありますか? –

+0

それほど反対ではありません。それは私にもっとコントロールを与えてくれました。私はNotConverterを使用してIsEnabledにプロパティをバインドしていましたが、このアプローチではC#の構文を許可し、MarkupExtensionを無効にしました。ですから、私のMarkupExtensionはこの構文を許可します。 "" {m:SimpleBinding!IsEnabled} "'。 – Jose

関連する問題