Вот быстрый ответ на решение Microsoft, предложенное Дереком. Вместо того, чтобы загружать и просеивать весь материал Prism, просто скопируйте этот класс в свой проект, а затем выполните шаги, чтобы активировать его:
UpdateBindingOnPropertyChangedBehviour.cs
using System;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Interactivity;
namespace MyCompany.MyProduct
{
/// <summary>
/// Custom behavior that updates the source of a binding on a text box as the text changes.
/// </summary>
public class UpdateTextBindingOnPropertyChanged : Behavior<TextBox>
{
/// <summary>
/// Binding expression this behavior is attached to.
/// </summary>
private BindingExpression _expression;
/// <summary>
/// Called after the behavior is attached to an AssociatedObject.
/// </summary>
/// <remarks>
/// Override this to hook up functionality to the AssociatedObject.
/// </remarks>
protected override void OnAttached()
{
base.OnAttached();
// Hook events to change behavior
_expression = AssociatedObject.GetBindingExpression(TextBox.TextProperty);
AssociatedObject.TextChanged += OnTextChanged;
}
/// <summary>
/// Called when the behavior is being detached from its AssociatedObject, but before it has actually occurred.
/// </summary>
/// <remarks>
/// Override this to unhook functionality from the AssociatedObject.
/// </remarks>
protected override void OnDetaching()
{
base.OnDetaching();
// Un-hook events
AssociatedObject.TextChanged -= OnTextChanged;
_expression = null;
}
/// <summary>
/// Updates the source property when the text is changed.
/// </summary>
private void OnTextChanged(object sender, EventArgs args)
{
_expression.UpdateSource();
}
}
}
Это в основном очищенная версия кода Microsoft Prism 4.1 (см. Проект Silverlight \ Prism.Interactivity, если вы хотите просмотреть остальные).
Теперь, как его использовать:
- Добавьте ссылку на сборку System.Windows.Interactivity в ваш проект Windows Phone.
- На каждой странице, где вы хотите использовать поведение, добавьте ссылку XAML в сборку:
XMLNS: я = "CLR-имена: System.Windows.Interactivity; сборка = System.Windows.Interactivity"
Внутри XAML каждого TextBox, к которому вы хотите применить bahvior (который уже имеет привязку TwoWay к вашему исходному свойству), добавьте следующее:
<я: Interaction.Behaviors>
Примечание: префикс "my:" может отличаться в вашем коде. Это просто ссылка на пространство имен, куда вы добавили класс поведения.