我一直在探索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失去焦点时更新,而不是每次属性更改时都会更新?
答案 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
};
}