我有一个从WPF textbox到业务对象的绑定。它与LostFocus上的更新是双向绑定。如果我在文本框中写入,它会更新BO。到目前一切尚好。
<TextBox.Text>
<Binding Path="SelectedEmployees"
UpdateSourceTrigger="LostFocus" />
</TextBox.Text>但我想让它执行以下操作:如果我输入"1,10,8,9“,那么BO将被更新,并且BO将输入排序为"1,8,9,10”。然后用来自BO的处理后的数据更新文本框。
如何让绑定再次更新文本框?我必须通过后台代码“手动”完成这项工作吗?
发布于 2011-01-14 21:25:58
TextBox的UpdateSourceTrigger属性的默认值为LostFocus,因此不需要显式设置它。假设您的SelectedEmployees属性有一个getter和一个setter,那么默认情况下绑定将以两种方式工作。
因此,您需要做的就是确保在业务对象上实现INotifyPropertyChanged (或作为视图模型上的包装器属性),并在SelectedEmployees设置器中对输入进行排序,将支持字段设置为这个有序的值,然后调用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");
}
}发布于 2011-01-14 20:46:04
如果您有双向绑定,并且BO对值进行排序,并在排序后将属性设置为新值,则控件应反映这一点。
如果没有,请检查您是否正确地实现了INotifyPropertyChanged,并且在排序后触发了PropertyChanged (我假设您的BO不是DependencyObject)。
<TextBox.Text>
<Binding Path="SelectedEmployees" UpdateSourceTrigger="LostFocus" Mode="TwoWay"/> </TextBox.Text> https://stackoverflow.com/questions/4691162
复制相似问题