首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绑定->数据: GUI ->业务对象GUI

如何绑定->数据: GUI ->业务对象GUI
EN

Stack Overflow用户
提问于 2011-01-14 20:42:23
回答 2查看 324关注 0票数 0

我有一个从WPF textbox到业务对象的绑定。它与LostFocus上的更新是双向绑定。如果我在文本框中写入,它会更新BO。到目前一切尚好。

代码语言:javascript
复制
<TextBox.Text>
    <Binding Path="SelectedEmployees" 
             UpdateSourceTrigger="LostFocus" />
</TextBox.Text>

但我想让它执行以下操作:如果我输入"1,10,8,9“,那么BO将被更新,并且BO将输入排序为"1,8,9,10”。然后用来自BO的处理后的数据更新文本框。

如何让绑定再次更新文本框?我必须通过后台代码“手动”完成这项工作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-14 21:25:58

TextBox的UpdateSourceTrigger属性的默认值为LostFocus,因此不需要显式设置它。假设您的SelectedEmployees属性有一个getter和一个setter,那么默认情况下绑定将以两种方式工作。

因此,您需要做的就是确保在业务对象上实现INotifyPropertyChanged (或作为视图模型上的包装器属性),并在SelectedEmployees设置器中对输入进行排序,将支持字段设置为这个有序的值,然后调用PropertyChanged事件以使绑定无效,并让UI通过SelectedEmployees getter拾取更新(排序)的值。

代码语言:javascript
复制
private string selectedEmployees;
public string SelectedEmployees
{
  get { return this.selectedEmployees; }
  set
  {
    string sortedValue = // sort value here
    this.selectedEmployees = sortedValue;
    this.OnPropertyChanged("SelectedEmployees");
  }
}
票数 1
EN

Stack Overflow用户

发布于 2011-01-14 20:46:04

如果您有双向绑定,并且BO对值进行排序,并在排序后将属性设置为新值,则控件应反映这一点。

如果没有,请检查您是否正确地实现了INotifyPropertyChanged,并且在排序后触发了PropertyChanged (我假设您的BO不是DependencyObject)。

代码语言:javascript
复制
<TextBox.Text>     
       <Binding Path="SelectedEmployees" UpdateSourceTrigger="LostFocus" Mode="TwoWay"/> </TextBox.Text> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4691162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档