2011-08-05 2 views
0

バインディングがバインドされているコントロールを更新する時間を変更できるかどうかは疑問でした。たとえば、私は、キーが押されるたびに更新されているTextBoxで作業していますが、代わりにフォーカスを失ったときに更新したいと思います。
アイデアSilverlightで可能なバインディング時間を変更しています

バインディングを削除し、その後のLostFocusのためのあなたのテキストボックスのイベントを追加します:つまり、これはあなたがやろうとしているが、ここで提案があります正確に何である場合

+0

あなたはのいくつかを使用することを示していることができますxaml、私はあなたが最初の場所でTextBoxからこの動作を取得する方法に興味がありますか? – AnthonyWJones

答えて

2

私はTextBoxが焦点を合わせた場所がどこかに移動するまでバインディングソースの更新を取り消したコントロールだと考えていたので、これは驚きです。

とにかく、キーを押すたびに、またはコントロールのように何らかのコントロールが正常に更新されると考えられます。

一般的な解決策は、ソースの更新を「手動で」制御することです。 UpdateSourceTriggerプロパティ設定を「明示的」に設定すると、これを行うことができます。つまり、バインディングのソースは、コードがBindingExpressionUpdateSourceメソッドを「TextBox」のTextPropertyとのバインディングに対して明示的に呼び出すときにのみ更新されます。

"TextBox" LostFocusイベントのイベントハンドラでこの明示的な更新を実行できます。

例えば、最初のユーザーコントロールでこのXAMLを追加: - イベントコードビハインドハンドラで今

<Grid x:Name="LayoutRoot"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <TextBox x:Name="Target" /> 
    <TextBox x:Name="Source" Grid.Row="1" 
     Text="{Binding Text, ElementName=Target, Mode=TwoWay, UpdateSourceTrigger=Explicit}" LostFocus="Source_LostFocus"/> 
</Grid> 

は、次のようになります -

private void Source_LostFocus(object sender, RoutedEventArgs e) 
    { 
     ((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource(); 
    } 
+0

+1:良いアイデアを教えてください。 –

1

わかりません。

private void TextBox_LostFocus(object sender, RoutedEventArgs e) 
{ 
    textBox.Text = originallyBindedValue; 
} 

としてXAMLを通じたクリーンいますが、ご希望の動作を取得することができるはずはありません。

+0

ええ、私はそれをやっていると思っていましたが、私はコードの背後にあることを避けることを望んでいました。 –

関連する問題