2011-08-05 6 views
0

바인딩이 바인딩 된 컨트롤을 업데이트하는 시간을 변경할 수 있는지 궁금합니다. 예를 들어, 키를 누를 때마다 업데이트되는 TextBox를 사용하고 있지만 초점이 사라지면 업데이트하고 싶습니다.
아이디어가 있으십니까?Silverlight에서 바인딩 시간을 변경할 수 있습니까

이 바인딩을 제거하고 LostFocus에 대한 텍스트 상자에 대한 이벤트를 추가합니다 : 즉, 이것은 당신이해야 할 노력하고 있지만, 여기에 제안 정확히 어떤 경우

+0

당신이 중 일부를 사용하는 방법을 보여 할 수 있습니다 xaml, 나는 당신이 처음부터 TextBox에서이 동작을 어떻게 관리하는지에 흥미가 있습니까 ?? – AnthonyWJones

답변

2

TextBox가 포커스가있을 때까지 바인딩 소스를 업데이트하지 못하게 한 컨트롤이라고 생각하여 놀랍습니다. 작은 테스트에서이를 확인합니다.

아무튼, 모든 키를 누르거나 일부 컨트롤에서 정상적으로 업데이트되는 것을 상상해보십시오.

일반적인 해결책은 소스 업데이트를 "수동으로"제어하는 것입니다. UpdateSourceTrigger 속성 설정을 "명시 적"으로 설정하면이 작업을 수행 할 수 있습니다. 즉, 코드 원본이 BindingExpressionUpdateSource 메서드에서 "TextBox"의 TextProperty 바인딩을 명시 적으로 호출 할 때만 바인딩 소스가 업데이트됩니다.

"TextBox"LostFocus 이벤트의 이벤트 처리기에서이 명시 적 업데이트를 수행 할 수 있습니다.

예를 들어, 초기의 UserControl이 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

그래, 그 일을 생각했지만, 코드에서 그 일을 피하기를 바랬다. –

관련 문제