Caliburn Micro:如何设置绑定UpdateSourceTrigger?

时间:2011-02-17 18:58:48

标签: wpf mvvm caliburn.micro

我一直在探索Caliburn Micro MVVM框架只是为了感受它,但我遇到了一些问题。我有一个TextBox绑定到我的ViewModel上的字符串属性,我希望在TextBox失去焦点时更新属性。

通常我会通过在绑定上将UpdateSourceTrigger设置为LostFocus来实现这一点,但我没有看到任何方法在Caliburn中执行此操作,因为它已自动为我设置了属性绑定。目前,每次TextBox的内容更改时,属性都会更新。

我的代码非常简单,例如这里是我的VM:

public class ShellViewModel : PropertyChangeBase
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set 
        { 
            _name = value; 
            NotifyOfPropertyChange(() => Name);
        }
    }
}

在我的视图中,我有一个简单的TextBox。

<TextBox x:Name="Name" />

如何更改它以使Name属性仅在TextBox失去焦点时更新,而不是每次属性更改时都会更新?

1 个答案:

答案 0 :(得分:22)

只需为TextBox的实例明确设置绑定,并且Caliburn.Micro不会触及它:

<TextBox Text="{Binding Name, UpdateSourceTrigger=LostFocus}" />

或者,如果要更改TextBox的所有实例的默认行为,则可以在引导程序的ConventionManager.ApplyUpdateSourceTrigger方法中更改Configure的实现。

类似的东西:

protected override void Configure()
{
  ConventionManager.ApplyUpdateSourceTrigger = (bindableProperty, element, binding) =>{
#if SILVERLIGHT
            ApplySilverlightTriggers(
              element, 
              bindableProperty, 
              x => x.GetBindingExpression(bindableProperty),
              info,
              binding
            );
#else
            if (element is TextBox)
            {
                return;
            }

            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
#endif
  };
}