我有一个从WPF文本框到业务对象的绑定。它是LostFocus更新的双向绑定。如果我在文本框中写入它会更新BO。到现在为止还挺好。
<TextBox.Text>
<Binding Path="SelectedEmployees"
UpdateSourceTrigger="LostFocus" />
</TextBox.Text>
但我想让它做到以下几点:如果我输入“1,10,8,9”,则BO会更新,BO会将输入排序为“1,8,9,10”。然后使用来自BO的处理数据更新文本框。
如何让绑定再次更新文本框?我是否必须通过后面的代码“手动”执行此操作?
答案 0 :(得分:1)
如果你有双向绑定并且BO对值进行排序并在排序后将属性设置为新值,则控制器应该反映这一点。
如果没有,检查你是否已经实现了正确的INotifyPropertyChanged,并且在排序后触发了PropertyChanged(我假设你的BO不是DependencyObject)。
<TextBox.Text>
<Binding Path="SelectedEmployees" UpdateSourceTrigger="LostFocus" Mode="TwoWay"/> </TextBox.Text>
答案 1 :(得分:1)
TextBox的UpdateSourceTrigger属性具有默认值LostFocus,因此您无需显式设置它。假设您的SelectedEmployees属性有一个getter和一个setter,那么默认情况下绑定将以两种方式工作。
因此,您需要做的就是确保在业务对象上实现INotifyPropertyChanged(或作为视图模型的包装器属性),并在SelectedEmployees setter中,对输入进行排序,并设置对此有序值的支持字段,并调用PropertyChanged事件使绑定无效,并让UI通过SelectedEmployees getter获取更新的(已排序)值。
private string selectedEmployees;
public string SelectedEmployees
{
get { return this.selectedEmployees; }
set
{
string sortedValue = // sort value here
this.selectedEmployees = sortedValue;
this.OnPropertyChanged("SelectedEmployees");
}
}