Silverlight에서 키 업 이벤트가 발생하면 양방향 데이터 바인딩을 시작하는 방법이 있습니까? 현재 나는 구속력을 얻기 위해 텍스트 상자에 초점을 잃어야합니다. 나는이 일을함으로써이를 달성Silverlight 양방향 데이터 바인딩 (키 업)
<TextBox x:Name="Filter" KeyUp="Filter_KeyUp" Text="{Binding Path=Filter, Mode=TwoWay }"/>
Silverlight에서 키 업 이벤트가 발생하면 양방향 데이터 바인딩을 시작하는 방법이 있습니까? 현재 나는 구속력을 얻기 위해 텍스트 상자에 초점을 잃어야합니다. 나는이 일을함으로써이를 달성Silverlight 양방향 데이터 바인딩 (키 업)
<TextBox x:Name="Filter" KeyUp="Filter_KeyUp" Text="{Binding Path=Filter, Mode=TwoWay }"/>
...
Filter.GetBindingExpression(TextBox.TextProperty).UpdateSource();
과 XAML에서
당신은 또한을 업데이트하는 재사용 가능한 동작을 만들기 위해 혼합 상호 작용 행동을 사용할 수<TextBox x:Name="Filter" Text="{Binding Path=Filter, Mode=TwoWay, UpdateSourceTrigger=Explicit}" KeyUp="Filter_KeyUp"/>
KeyUp에 바인딩 예 :
public class TextBoxKeyUpUpdateBehaviour : Behavior<TextBox>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.KeyUp += AssociatedObject_KeyUp;
}
void AssociatedObject_KeyUp(object sender, KeyEventArgs e)
{
var bindingExpression = AssociatedObject.GetBindingExpression(TextBox.TextProperty);
if (bindingExpression != null)
{
bindingExpression.UpdateSource();
}
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.KeyUp -= AssociatedObject_KeyUp;
}
}
이 동작은 Xaml이이 동작을 이용하기 위해 어떤 식으로 OP를 포함해야하는지 더 자세히 설명합니다. – AnthonyWJones
우리 애플 리케이션에 동일한 요구 사항이 있었지만 일부 클라이언트는 MacOS에 있습니다. MacOS는 항상 Firefox에서 keyup 이벤트를 발생시키는 것은 아닙니다.
허용 된 대답은 UpdateSourceTrigger가 Explicit로 설정되었으므로 큰 문제가되지만 이벤트가 발생하지 않습니다. 결과 : 바인딩을 업데이트하지 마십시오.
그러나 TextChanged 이벤트는 항상 발생합니다. 대신이 일을 듣고는 모두 :)
가 여기 내 버전입니다 좋다 :
public class AutoUpdateTextBox : TextBox
{
public AutoUpdateTextBox()
{
TextChanged += OnTextChanged;
}
private void OnTextChanged(object sender, TextChangedEventArgs e)
{
this.UpdateBinding(TextProperty);
}
}
그리고 UpdateBinding ExtensionMethod :
public static void UpdateBinding(this FrameworkElement element,
DependencyProperty dependencyProperty)
{
var bindingExpression = element.GetBindingExpression(dependencyProperty);
if (bindingExpression != null)
bindingExpression.UpdateSource();
}
오, 당신이 SL4을 사용하고 있습니다. BindingExpression이 SL3에 없었기 때문에, – Timores
BindingExpression은 SL3에있었습니다. –
이것은 Mac에서는 작동하지 않습니다. 더 나은 해결책이 있습니까? –