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

时间:2011-01-14 12:42:23

标签: .net wpf binding

我有一个从WPF文本框到业务对象的绑定。它是LostFocus更新的双向绑定。如果我在文本框中写入它会更新BO。到现在为止还挺好。

<TextBox.Text>
    <Binding Path="SelectedEmployees" 
             UpdateSourceTrigger="LostFocus" />
</TextBox.Text>

但我想让它做到以下几点:如果我输入“1,10,8,9”,则BO会更新,BO会将输入排序为“1,8,9,10”。然后使用来自BO的处理数据更新文本框。

如何让绑定再次更新文本框?我是否必须通过后面的代码“手动”执行此操作?

2 个答案:

答案 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");
  }
}